Недавно я читал авторитетный гид AngularJS. По разным причинам (в основном потому, что у меня нет денег, я ненавижу это, поэтому я решил загрузить электронную версию в Интернете (потому что это не стоит денег, хаха ...). Шрифт довольно яс Чтобы научиться, но не хотите изучать номер страницы, но не хотите изучить его?
К счастью, прежде чем читать электронные книги, я был немного простым. Я немного узнал, просмотр видеороликов, от двустороннего привязки данных до сервисов, а затем до системы инструкций, у меня был более или менее контакт. Кроме того, во время специального назначения в веб -специальном выборе курса простая система управления классами учеников была построена через Angularjs на переднем конце и Nodejs на бэкэнд и мангузе на бэкэнд. Поскольку у меня нет денег, я могу разместить это только на GitHub. Адрес Github: система управления студентами, добро пожаловать в Fork, давайте перейдем к теме ниже ...
===========================================================================================================
Обычно существует три способа для объекта, чтобы получить контроль над его зависимостью:
(1) создавать зависимости внутри;
(2) ссылки через глобальные переменные;
(3) пройти через параметры, где это необходимо.
Инъекция зависимости достигается третьим способом. Два других метода будут вызывать различные проблемы, такие как загрязнение глобального объема, что делает изоляцию чрезвычайно сложной и т. Д. Внедрение зависимостей-это дизайн, который удаляет жесткие зависимости, так что зависимости могут быть изменены или даже удалены во время выполнения.
Возможность изменения зависимостей во время выполнения идеально подходит для тестирования, поскольку она позволяет нам создавать изолированную среду, в которой можно использовать высмеиваемые объекты вместо реальных объектов в производственной среде.
С функциональной точки зрения, инъекция зависимости будет автоматически находить зависимость заранее и информировать зависимый ресурс цели впрыска, так что ресурс может быть введен немедленно, когда цель этого нуждается в этом.
При написании компонентов, которые зависят от других объектов или библиотек, нам необходимо описать зависимости между компонентами. Во время выполнения инжектор создает экземпляр зависимости и отвечает за передачу ее зависимому потребителю.
// Отличный пример из функции Angular Documentation someClass (Greeter) {this.greeter = Greeter;} someclass.prototype.greetName = function (name) {this.greeter.greet (имя);}; // Обратите внимание, что образцы кода создает контроллер на глобальной области, что не является хорошей идеей, это просто для продемонстрирования.SomeClass может получить доступ к внутреннему приветствию во время выполнения, но ему не все равно, как получить ссылку на приветственного. Чтобы получить ссылку на экземпляр приветствия, создатель Someclass отвечает за построение его зависимостей и их передачу.
По вышеуказанным причинам AngularJS использует $ Incetor (служба инжекторов) для управления запросами и экземпляром зависимостей. Фактически, $ Incetor отвечает за создание всех компонентов в AngularJ, включая модули, инструкции и контроллеры приложения.
Во время выполнения, $ Incetor отвечает за создание какого -либо модуля, когда он начинается и передает все зависимости, в которые она нуждается.
Например, следующий код. Это простое приложение, которое объявляет модуль и контроллер:
Angular.Module ('myApp', []). Factory ('Greeter', function () {return {regret: function (msg) {alert (msg);}}}). Контроллер ('myController', function ($ rack, greeter) {$ scope.sayhello = function.Когда Angularjs создает этот модуль, он ищет приветствующий и естественно передает на него ссылки:
<div ng-app = "myApp"> <div ng-controller = "myController"> <кнопка ng-click = "sayhello ()"> hello </button> </div> </div>
Внутренне процесс обработки AngularJS выглядит следующим образом:
// Используйте инжектор для загрузки приложения var injector = angular.injector (['ng', 'myApp']); // Загрузить службу контроллера $ через инжектор var $ controller = инжектор. MyController = $ controller ('myController', {$ scope: scope});Приведенный выше код не указывает, как найти приветственный, но он работает должным образом, потому что $ Injector будет нести ответственность за поиск и загрузку для нас.
AngularJS извлекает список параметров из пропущенной функции во время экземпляров через функцию аннотата. Введите следующий код в инструменты разработчика Chrome, чтобы просмотреть эту функцию:
> Injector.annotate (function ($ Q, Greeter) {}) ["$ Q", "Greeter"]В любом приложении AngularJS работает инжектор, независимо от того, знаем ли мы или нет. При написании контроллера, если не используется тег [] или делается явное объявление, $ Injector пытается вывести зависимости по именам параметров.
Предполагаемое заявление об инъекциях
Если нет явного объявления, AngularJS предполагает, что имя параметра является именем зависимости. Следовательно, он внутренне вызовет метод toString () функционального объекта, анализировать и извлечь список параметров функции и ввести эти параметры в экземпляр объекта через инжектор $. Процесс впрыска заключается в следующем:
injector.invoke (function ($ http, greeter) {});Обратите внимание, что этот процесс применим только к несущественному и запутанному коду, так как AngularJS требует необработанного списка параметров для анализа. Благодаря этому процессу вывода на основе имен параметров, порядок параметров имеет небольшую значимость, поскольку AngularJs поможет нам внедрить свойства в правильном порядке.
Явно вводит объявления
AngularJS предоставляет явные методы для четкого определения зависимостей, которые необходимо использовать функции, когда она вызывается. Объявление зависимостей таким образом все еще может работать должным образом, даже если исходный код сжат, а имя параметра изменяется. Свойство $ inject может использоваться для реализации функции явного впрыска объявлений. Свойство $ inject функционального объекта - это массив, тип элемента массива является строкой, и их значения являются названием услуги, которую необходимо вводить.
Вот пример кода:
var AcontrollerFactory = function acontroller ($ rack, regreter) {console.log ("загруженный контроллер", regieter); // ... контроллер}; acontrollerfactory. $ inject = ['$ acpope', 'regreter']; // Призовочный сервисный консоль.log ("Greeter Service");} // Наш контроллер приложения Angular.Module ('myApp', []). Controller ('MyController', AcontrollerFactory) .Factory ('greeter', GreeterService); // Получить инжектор и создавать var var vare var varulor. 'myApp']), controller = injector.get ('$ controller'), ourtscope = injector.get ('$ rootscope'), newscope = rotscope. $ new (); // Контроллер Call Controller ('myController', {$ scope: newscope});Для этого метода объявления порядок параметров очень важен, поскольку порядок элементов $ inject Marry должен соответствовать одному по порядку введенных параметров. Этот метод объявления может быть запущен в сжатом коде, поскольку соответствующая информация об объявлении уже связана с самой функцией.
Заявление об внутризмехвой инъекции
Последним способом внедрения объявлений, предоставленных AngularJS, является встроенное заявление об инъекциях, которое можно использовать в любое время. Этот метод на самом деле представляет собой синтаксический сахар, который точно такой же, как принцип, упомянутый выше для инъекции объявлений через свойство $ inject, но позволяет нам передавать параметры изнутри линии, когда функция определена. Кроме того, это избегает использования временных переменных в процессе определения.
При определении объекта AngularJS встроенное объявление позволяет нам транслировать массив параметров непосредственно вместо функции. Элементы массива - это строки, которые представляют имена зависимостей, которые могут быть введены в объект. Последний параметр - это объект объекта самого инъекции зависимости.
Примеры следующие:
Angular.Module ('myApp'). Controller ('myController', ['$ scope', 'Greeter', function ($ scope, greeter) {}]);Поскольку необходимо обработать список строк, встроенные инъекционные объявления также могут работать нормально в сжатом коде. Обычно он используется в скобках и символом [], который объявляет массив.
Вышеупомянутая инъекция зависимости AngularJS - это весь контент, которым я делюсь с вами. Я надеюсь, что вы можете дать вам ссылку, и я надеюсь, что вы сможете поддержать Wulin.com больше.