1. Что такое модуль?
Многие приложения имеют основной метод для инициализации, загрузки (означает ли провода?) И запуск приложений. Угловое применение не требует основного метода. Вместо этого модуль предоставляет декларативную форму с указанной целью, описательное описание того, как начинается приложение. Есть несколько преимуществ для этого:
2. Основы
Мы стремимся узнать, как сделать Hello World Module работать. Вот несколько ключевых вещей, на которые стоит обратить внимание:
Module API (http://code.angularjs.org/1.0.2/docs/api/angular.module)
Обратите внимание на модуль MyApp, упомянутый в <html ng-app = "myApp">, который позволяет пусковой установке запустить модуль MyApp, который мы определили.
<! Doctype html> <html lang = "zh-cn" ng-app = "myApp"> <Head> <meta charset = "utf-8"> <title> Основы </title> <style type = "text/css"> .ng-cloak {display: none; } </style> </head> <body> <div> {{'Kitty' | Приветствие}} </div> <script src = "../ angular -1.0.1.js" type = "text/javascript"> </script> <script type = "text/javascript"> var somplemodule = angular.module ("myApp", []); SimpleModule.filter ("Greet", function () {return function (name) {return "hello" + name + ";";}}); </script> </body> </html>3. (Рекомендуемая настройка) Рекомендуемая настройка
Хотя приведенный выше пример прост, это не крупномасштабное приложение. Мы рекомендуем разделить ваше приложение на несколько модулей следующим образом:
Причина этого деления заключается в том, что когда мы тестируем, нам часто нужно игнорировать код инициализации, который затрудняет тест. Разделив код на отдельные модули, легко игнорировать этот код в тестах. Таким образом, мы можем больше сосредоточиться на загрузке соответствующего модуля для тестирования.
Выше выше - это просто предложение, вы можете сделать это так, как хотите.
4. Загрузка и зависимости модуля (загрузка модуля и зависимости)
Модуль - это набор конфигураций, которые выполняют блоки, применяемые в процессе запуска приложения. В самой простой форме он состоит из двух типов блоков:
1. Блоки конфигурации: выполнены в процессе регистрации и конфигурации поставщика. Только провайдер и постоянный (постоянный?) Могут быть введены в блоки конфигурации. Это следует избегать несчастного случая, что служба выполняется до настройки службы.
2. Запустите блоки: выполнить после создания инжектора и используется для запуска приложения. Только экземпляры и константы могут быть введены в блок прогона. Это следует избегать дальнейшего выполнения конфигурации системы во время работы программы.
Angular.Module ('MyModule', []). config (function (injectables) {// Insjector // Вот пример конфигурации блок // Мы можем получить такие вещи, как это необходимо // Мы можем вводить поставщиков (не экземпляры, а не экземпляры) в блок конфигурации}). run (function (injectables) {// Incement Injector // Вот пример блока Run // Мы можем получить такие вещи, как это необходимо // Мы можем вводить только экземпляры (экземпляры) (не поставщики) в блок выполнения});а) Конфигурационные блоки
Существует удобный способ сделать это в модуле, который эквивалентен блоку конфигурации. Например:
Angular.Module ('MyModule', []). Значение ('A', 123). Factory ('a', function () {return 123;}). Директива ('DiMiMeviename', ...). Filter ('file Entername', ...); // эквивалентен angular.module ('mymodule', []). config (function ($ предоставление, $ compileprovider, $ filterprovider) {$ предоставление.Порядок, в котором применяются блоки конфигурации, согласуется с порядком, в котором они зарегистрированы. Для постоянных определений это дополнительный случай, то есть постоянное определение, размещенное в начале блоков конфигурации.
б) запустить блоки (блок приложения)
Запустить блок - самая близкая вещь к основному методу в угловой. Блок запуска - это код, который должен быть выполнен для запуска приложения. Он будет выполнен после того, как будут созданы все конфигурации и форсунки службы. Запуск блоков обычно содержат код, который труднее для модульного тестирования. По этой причине эти коды должны быть определены в отдельном модуле, чтобы их можно было игнорировать в модульных тестах.
в) зависимости (зависимости)
Модуль может перечислять другие модули, от которых он зависит. Полагаться на модуль означает, что запрашиваемый модуль (надежный) должен быть загружен перед запросом модуля (модуля, который должен зависеть от других модулей, запрашивающий). Другими словами, блок конфигурации запрошенного модуля будет выполнен до блоков конфигурации или требуемого модуля, как объяснить или здесь?). То же самое относится и к блоку прогона. Каждый модуль может быть загружен только один раз, даже если есть несколько других модулей, которые требуют этого.
г) асинхронная нагрузка (асинхронная нагрузка)
Модуль является одним из способов управления конфигурацией инжектора $, не делая ничего с загрузкой сценариев в виртуальную машину. Теперь есть готовые проекты, которые специально разработаны для загрузки сценариев, а также могут использоваться в угловых. Поскольку модули ничего не делают во время загрузки, они могут быть загружены в виртуальную машину в любом порядке. Скрипт -загрузки могут использовать эту функцию для выполнения параллельной загрузки.
5. Единое тестирование
В простейшей форме модульного тестирования можно создать подмножество применения в тесте, а затем запустить их. Важно отметить, что мы должны понять, что для каждого инжектора каждый модуль будет загружен только один раз. Обычно приложение имеет только один инжектор. Но в тестах каждый тестовый пример имеет свой инжектор, что означает, что в каждой виртуальной машине модуль будет загружен несколько раз. Построение модуля правильно поможет для тестирования на единицу, как в следующем примере:
В этом примере мы готовимся предположить, что определяется следующий модуль:
Angular.Module ('greetMod', []). Factory ('alert', function ($ window) {return function (text) {$ window.alert (text);};}). Value ('galute', 'hello'). Factory ('greet', функция (Alert, Salutation) {return (name) {alert (alertation + name + ');Давайте напишем некоторые тестовые примеры:
describe('myApp', function() { // Load the module of the application response, and then load the specified test module that rewrites $window to the mock version. // Do this, when window.alert() is performed, the tester will not stop because it is blocked by the real alert window // Here is an example of overwriting configuration information in the test beforeEach(module('greetMod', function($provide) {// It seems that Окно «Реальное $» - это заменить следующее $. Inject (Function (Greet, $ window) {Greet ('World'); ожидайте ($ window.alert) .tohavebeencalledwith ('Hello World!');})); Module ($ предоставлена) {$ предоставлена.