API не найден?
AngularJS обеспечивает некоторую инкапсуляцию функций, но когда вы пытаетесь получить доступ к этим функциям через Global Object Angular, вы обнаружите, что они сильно отличаются от библиотек, с которыми вы столкнулись в прошлом.
$ http
Например, в jQuery мы знаем, что его API выявляется через глобальный объект: $. Когда вам нужно сделать звонок Ajax, используйте $ .ajax (). Такой API очень соответствует ожиданиям мышления.
AngularJS также выставляет глобальный объект: Angular, который также инкапсулирует вызов AJAX и предоставляет $ HTTP -объект. Однако, когда вы пытаетесь получить доступ к Angular. $ Http, используя старый опыт, вы обнаружите, что это не так!
После тщательной проверки документации $ http, я не могу найти никаких подсказок. Где я могу получить этот $ http?
Инъекция зависимости/di
Фактически, AngularJS организует все функциональные компоненты в инъекции зависимостей:
В режиме впрыска зависимостей все компоненты должны проходить через контейнеры, чтобы получить доступ к друг другу, что приводит к тому факту, что в Angularjs вы должны использовать посредник для получения объекта экземпляра компонента:
var injector = angular.injector (['ng']); injector.invoke (function ($ http) {// do Sth. с $ http});Этот посредник является контейнером в режиме впрыска зависимостей. В Angularjs это называется: инжектор.
В примере → _ → мы видим, что у нас есть объект $ http, который на самом деле является функцией.
Инжектор/инжектор
Инжектор является ключом к реализации структуры AngularJS и разработки приложений, которая является реализацией контейнеров DI/IOC.
AngularJs делит функции на различные типы компонентов и реализует их отдельно. Эти компоненты имеют коллективное имя - поставщик/поставщик. На следующем рисунке перечислены несколько обычно используемых встроенных услуг для AngularJS:
Компоненты AngularJS не могут быть вызваны непосредственно друг от друга. Один компонент должен пройти через инжектор, чтобы вызвать другой компонент. Это преимущество заключается в том, что компоненты отделены друг от друга, а управление всем жизненным циклом объекта бросается в инжектор.
Инжектор реализует две важные функции:
Центрально хранить рецепты для всех поставщиков
Рецепт на самом деле: Имя + Класс Конструктор. Когда AngularJS начинается, эти поставщики впервые зарегистрированы в инжекторе, используя свои рецепты. Например, компонент службы HTTP -запроса инкапсулируется в классе $ httpprovider, и он зарегистрирован в инжекторе через имя «$ http».
Предоставьте примеры функциональных компонентов по требованию
Другие компоненты, такие как контроллер пользователя, если вам нужно использовать функцию HTTP, используйте имя «$ http» для запроса инжектора, вы можете получить экземпляр службы HTTP.
Попробуйте изменить код → _ →, чтобы увидеть, что такое служба компиляции $?
Зарегистрировать компонент службы
С точки зрения инжектора компонент является поставщиком функций, поэтому он называется поставщиком/поставщиком. В AngularJs поставщик инкапсулируется в форме класса JavaScript (конструктор).
Имена услуг обычно идентифицируются по строке, такой как «$ http» для HTTP Calling Service, «$ oorcope» для объекта Root Scope, '$ Compilation' для службы компиляции ...
Класс поставщика требует функции $ get (завод класса). Называя эту функцию, инжектор может получить экземпляр компонента службы.
Комбинированная информация о имени и функции класса называется рецептом. Инжектор поддерживает централизованную библиотеку рецептов для создания различных компонентов по требованию. Эта библиотека рецептов на самом деле является хэш -объектом, ключ - это имя службы, а значение - это определение класса.
В примере → _ → мы определяем простой класс обслуживания, и экземпляр этого класса сервиса является строкой: «Привет, мир!». Мы используем «ezhello» в качестве имени службы для регистрации в инжекторе и отображать этот экземпляр через инжектор.
Получить объект инжектора
Чтобы использовать функциональность AngularJS, вы должны сначала получить инжектор. Есть два способа получить инжектор.
Создать новый инжектор
Вы можете создать новый инжектор с помощью angular.injector ():
Angular.Injector (модули, [strictdi]); Получите уже созданный инжектор
Если структура AngularJS была запущена, вы можете использовать метод Injector () объекта DOM для получения уже созданного инжектора:
var element = angular.element (dom_element);
var injector = element.injector ();
Вызов API через инжектор
В форсунке есть два метода для вызовов API: Invoke () и get ().
invoke ()
Используя метод Invoke () инжектора, вы можете напрямую вызвать пользовательский корпус функции и внедрить зависимый объект службы через параметры функции. Это использование рекомендации и соглашения AngularJS:
Angular.Injector (['ng']). invoke (function ($ http) {// do Sth. с $ http}); получать()Вы также можете использовать метод get () инжектора для получения экземпляра службы с указанным именем:
var my $ http = angular.injector (['ng']). get ('$ http'); // do Sth. С моей $ http→ _ → Пример На этот раз я использовал метод get (), чтобы напрямую получить экземпляр службы и почувствовать его!
Метод инъекции и принцип
Существует два способа информировать инжектор об объекте сервиса, который необходимо ввести: впрыск имени параметра и инъекция массива зависимостей.
Внедрение имени параметра
Когда AngularJS выполняет функцию invoke (), она преобразует определение функции, которое будет введено в строку, проверяет его таблицу параметров посредством регулярных выражений и, таким образом, обнаруживает и вводит объект службы, от которого он зависит:
// myfunc объявляет эту функцию зависеть от службы '$ http' var myfunc = function ($ http) {// do Sth. с $ http}; injector.invoke (myfunc); // определение Myfunc будет преобразовано в строку для проверки имени параметра.Существует проблема с этим, то есть когда мы сжимаем код JavaScript, $ http может быть изменен на другое имя, что приведет к выходу из строя.
Зависеть от массива
AngularJS использует метод массива зависимостей для решения проблемы, вызванной запутыванием сжатия кода. В настоящее время inkloke () передается в массив. Последний элемент массива - это функция, которая будет фактически выполнена, а другие элементы указывают имя службы, которое необходимо вводить в функцию. Инжектор будет вводить зависимые объекты в функцию в порядке в массиве.
С помощью этого метода имя таблицы параметров, подлежащая введению, не имеет значения:
// myfunc зависит от "$ http 'и' $ compile 'services var myfunc = [' $ http ',' $ compile ', function (p1, p2) {// do Sth. с p1 ($ http), p2 ($ compile)}]; injector.invoke (myfunc);Экземпляр → _ → вводится методом, зависящим от массива. На этот раз вводится экземпляр сервиса Ezhello. Вы можете изменить имя параметра, чтобы увидеть, влияет ли это на результат?
Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.