Модуль является важным способом организации модулей в угловых. Он обеспечивает возможность инкапсулировать набор сплоченных компонентов бизнеса (контроллер, обслуживание, фильтр, директива ...). Это может разделить код на модули в соответствии с задачами бизнес -домена, а затем использовать зависимость модуля, чтобы вводить соответствующий содержимое модуля, чтобы мы могли лучше «отделить фокус» и достичь лучшей «высокой сплоченности и низкой связи». «Высокая сплоченность и низкая связь» происходит от принципа объектно-ориентированного дизайна. Сплоченность относится к целостности модуля или объекта. Набор тесно связанной логики должен быть инкапсулирован в одном и том же модуле, объекте и других кодовых единицах, а не разбросан повсюду; Соединение относится к степени зависимости между модулями, объектами и другими кодовыми единицами. Если модификация одного модуля повлияет на другой модуль, это означает, что два модуля взаимозависимы и тесно связаны.
В то же время модуль также является входом в наш угловой код. Во -первых, вам необходимо объявить модуль, а затем вы можете определить другие элементы компонентов в угловых, таких как контроллер, служба, фильтр, директива, код конфигурации, блок запуска кода и т. Д.
Определение модуля: angular.module ('com.ngbook.demo', []). Что касается функции модуля, могут быть переданы три параметра, и они:
Для метода Angular.Module мы имеем общие методы, а именно Angular.Module ('com.ngbook.demo', [необязательная зависимость]) и angular.module ('com.ngbook.demo'). Обратите внимание, что это совершенно другой способ, один из которых должен объявить модуль создания, а другой - получить объявленный модуль. В приложении объявление модуля должно быть и только один раз; Для получения модуля это может быть несколько раз. Рекомендуется разделить угловые компоненты в разных файлах, объявить модуль в файле модуля, а другие компоненты представляют модуль. Следует отметить, что при введении его в упаковке или скрипте сначала необходимо загрузить файл объявления модуля, а затем загрузить другие компонентные модули.
В группе Congular Kink Community иногда я слышу, как некоторые студенты спрашивают о ошибках "ng: areq":
[ng: areq] Аргумент «Демоктрил» не является функцией, стал неопределенным!
Это часто потому, что вы забываете определить контроллер или объявить модуль несколько раз. Объявление модуля несколько раз приведет к очистке предыдущей информации о определении модуля, поэтому программа не найдет определенные компоненты. Мы также можем узнать это из углового исходного кода (от Loader.js):
Function setupmoduleLoader (window) {... функция обеспечить (obj, name, factory) {return obj [name] || (obj [name] = factory ()); } var angular = убедиться (окно, 'angular', object); Вернуть Убедитесь (Angular, 'Module', function () {var modules = {}; модуль возврата функции (имя, требуется, configfn) {var assertnothasownproperty = function (name, context) {if (name === 'hasownproperty') {throw ngminerr ('badname', 'hasownproperty не является действительным {0 {0} namer', ', stectoser); Assertnothasownproperty (имя, «Модуль»); Модуль гарантирует, что вы « +» укажите зависимости как второй аргумент. », name);} var invokequeue = []; var runblocks = []; var config = venokelater ('$ injector', 'invoke'); var moduleinstance = {_invokequeue: vokequeue, _runblocks: runblocks, требуется: name, wome: wome: wome: wome: wome: wome: wome: wome:: wome::: Invokelater ('$ предоставлять', 'провайдер'), завод: Invokelater ('$ предоставление', 'factory'), Service: Invokelater ('$ предоставление', 'Service'), Value: Invokelater ('$ предоставлять', 'value'), Constant: Invokelater ('$ предоставлять', 'Constant', 'unfift'), анимация: invokelater ('$ предоставлять', 'constant', 'unfift'), анимация: invokelater. Filter: Invokelater ('$ filterProvider', 'Register'), Controller: Invokelater ('$ controverpuster', 'Register'), Directive: Invokelater ('$ compileprovider', 'Directive'), Config: run: function (block) {runblocks.push (block); ModuleInstance; }; }); }В коде мы можем понять, что при запуске Angular он создаст глобальный угловой объект, а затем опубликует API модуля на угловом объекте. Что касается кода API модуля, вы можете четко увидеть первую строку предиката. Имя модуля не может быть названо в честь HasownProperty, в противном случае будет выброшено сообщение об ошибке «BadName». Сразу после этого, если параметр имени передается, что указывает на то, что модуль объявлен, существующая информация о модуле будет удалена и установлена в NULL.
Из определения ModuleInstance мы видим, что API, выявленные Angular.Module: Invokequeue, Run Blocks, Tress, Name, Provider, Factory, Service, значение, постоянная, анимация, фильтр, контроллер, директива, конфигурация и запуск. Среди них Invokequeue и Runblocks являются личными атрибутами, согласованными по имени. Пожалуйста, не используйте их по желанию. Другими API являются широко используемыми методами определения угловых компонентов. Из кода Invokelater вы можете увидеть, что возврат таких определений угловых компонентов по -прежнему остается экземпляром ModuleInstance, который образует гладкий API. Рекомендуется использовать определения цепей для определения этих компонентов вместо объявления переменной глобальной модуля.
Наконец, если будет передаваться третий параметр configfn, он будет настроен в информацию о конфигурации. Когда угловой вступление в стадию конфигурации они будут выполнены в свою очередь для настройки углового приложения или угловых компонентов, таких как служба, до создания экземпляра.
Выше представляет собой сборник оператора Angular Module и полученная информация, перегруженная. Мы будем продолжать добавлять соответствующую информацию в будущем. Спасибо за поддержку этого сайта!