Метод загрузки службы в контроллер как ресурс зависимости очень похож на метод загрузки в другие службы.
Поскольку JavaScript является динамическим языком, DI не может выяснить, какой сервис следует вводить через статические типы (например, на статических напечатанных языках). Поэтому нам необходимо указать имя услуги через свойство $ inject, которое представляет собой массив строк, содержащих имена услуг, которые необходимо вводить. Важность порядка идентификатора обслуживания: порядок параметров в методе фабрики согласуется с порядком обслуживания в массиве. Названия параметров заводских методов не важны, но, как обычно, они соответствуют идентификатору обслуживания один за другим, и преимущества этого будут обсуждаться ниже.
1. Явная инъекция зависимости
Функция myController ($ scope, $ loc, $ log) {$ scope.firstmethod = function () {// Использовать $ service $ loc.sethash (); }; $ scope.secondmethod = function () {// Использовать $ log service $ log.info ('…')};} mycontroller. $ inject = ['$ location', '$ log'];пример:
<! Doctype html> <html lang = "zh-cn" ng-app = "mainapp"> <head> <meta charset = "utf-8"> <title> explicit-inject-service </title> </head> <body> <div ng-controller = "myControler"> <input = "ng-controller =" myControler "> <input =" ng-controller = "myControler"> <Input = "ng-controller =" myControler " ng-click="saveMsg()">save msg</button> <ul> <li ng-repeat="msg in msgs">{{msg}}</li> </ul></div><script src="../angular-1.0.1.js" type="text/javascript"></script><script type="text/javascript"> var app = Angular.Module ("maneApp", [], function ($ предоставление) {$ предоставление. factory ("notify", ["$ window", "$ timeout", function (Win, Timeout) {// Это зависит от службы службы. Через этот метод явного метода можно заполнить имена параметров случайным образом, но порядок должен соответствовать var msgs = []; if (msgs.length == 3) {timeout (function () {win.alert (msgs.join ("/n")); msgs = [];}, 10); Функция myController ($ s, $ noti) {// Это зависимая служба контроллера. С помощью этого явного метода имена параметров могут быть заполнены случайным образом, но порядок должен соответствовать $ s.msgs = []; $ s.savemsg = function () {this.msgs.push (this.msg); $ noti (this.msg); this.msg = ""; }; } // Укажите инъекционный материал // Вы также можете обратиться к примеру в http://www.cnblogs.com/lclao/archive/2012/10/16/2725317.html mycontroller. $ Inject = ['$ scome', 'utify'];2. Неявная инъекция зависимости
Новая особенность Angular DI, которая позволяет определять зависимости именами параметров. Давайте переписаем пример выше, чтобы показать, как неявно ввести окно $, $ rafope и уведомлять об сервисе.
пример:
<! Doctype html> <html lang = "zh-cn" ng-app = "mainApp"> <head> <meta charset = "utf-8"> <Title> неявный инъекционный сервис </title> </head> <body> <div ng-controller = "myControler"> <Input = "ng-model =" msgg "/>" msgg "/>" mscg "/>" MSGG "/>" MSGG "/>" MSCG "/>" MSGO "/>" MSGG "/>" MSGO "/>" MSCO "/>" MyControler " ng-click="saveMsg()">save msg</button> <ul> <li ng-repeat="msg in msgs">{{msg}}</li> </ul></div><script src="../angular-1.0.1.js" type="text/javascript"></script><script type="text/javascript"> var app = Angular.Module ("maneApp", [], function ($ предоставление) {$ предоставление. factory ("notify", function ($ window, $ timeout) {// Сервис зависит от услуг, неявно зависит, имя одно и то же var msgs = []; return function (msg) {msgs.push (msg); Если (msgs.lody == 3) {$ thenout () {$ timeout () {$ timeout () {$ timeout () {$ timeout () {$ timeout () $ windows (msgs.join ("/n"); Уведомление (this.msg);Хотя это очень удобно, если нам нужно сжать и запутать наш код, это может привести к изменению имени параметра. В этом случае нам все еще нужно использовать явное объявление зависимостей.
Выше приведено информация об AngularJs, внедряющих службы в контроллеры. Мы будем продолжать добавлять соответствующую информацию в будущем. Спасибо за поддержку этого сайта!