Думайте о модуле как о месте для подключения ряда других вещей, таких как директивы, сервисы, константы и т. Д. Модули могут быть внедрены в другие модули, обеспечивая высокий уровень повторного использования.
При написании углового приложения у вас будет модуль верхнего уровня, который является кодом вашего приложения (без шаблонов).
Сервисы - это в основном способ связи между контроллерами, но вы можете внедрить один сервис в другой. Службы часто используются как способ добраться до ваших хранилищ данных, и люди обернутся в угловые API, такие как ngResource. Этот метод полезен, поскольку делает тестирование (особенно насмешливое) довольно простым. У вас могут быть услуги для других вещей, таких как аутентификация, ведение журнала и т. Д.
Директивы используются для создания виджетов или упаковки существующих вещей, таких как плагины jquery. Обертывание существующих плагинов может быть проблемой, и причина, по которой вы это сделаете, заключается в установлении двусторонней привязки данных между плагинами и angular. Если вам не нужна двусторонняя привязка данных, вам не нужно оборачивать их.
Директива также является местом для манипулирования DOM, перехвата DOM-событий и т. Д. Вы не должны делать вещи, связанные с DOM, в контроллерах или сервисах. Создание директив может быть довольно сложным. ИМХО, я рекомендую сначала взглянуть на API для чего-то, что может сделать то, что вы ищете ИЛИ обратиться за советом в Google Group из Angular.