O método de carregamento do serviço no controlador como recurso de dependência é muito semelhante ao método de carregá -lo em outros serviços.
Como o JavaScript é uma linguagem dinâmica, o DI não consegue descobrir qual serviço deve ser injetado através de tipos estáticos (como nos idiomas tipôs estáticos). Portanto, precisamos especificar o nome do serviço por meio da propriedade $ inject, que é uma variedade de strings que contêm os nomes do serviço que precisam ser injetados. A importância da ordem de identificação de serviço: a ordem dos parâmetros no método da fábrica é consistente com a ordem de serviço na matriz. Os nomes dos parâmetros dos métodos de fábrica não são importantes, mas, como sempre, correspondem ao ID de serviço um por um, e os benefícios de fazê -lo serão discutidos abaixo.
1. Injeção explícita de dependência
function myController ($ scope, $ loc, $ log) {$ scope.firstMethod = function () {// use $ serviço de localização $ loc.Sethash (); }; $ scope.secondmethod = function () {// use $ log serviço $ log.info ('…')};} myController. $ inject = ['$ location', '$ log'];exemplo:
<! Doctype html> <html lang = "zh-cn" ng-App = "mainApp"> <head> <meta charset = "utf-8"> <title> explicit-inject-Service </title> </ad Head> <body> <div ng-CONTROLLER = "myControlller"> <input> " ng-click = "Savemsg ()"> Salvar msg </botão> <ul> <li ng-repeat = "msg em msgs"> {{msg}} </li> </ul> </div> <script src = "../ angular-1.1.js" type = "text/javScript"> angular.module ("mainApp", [], function ($ fornece) {$ fornece.factory ("notify", ["$ window", "$ timeout", function (win, timeout) {// Este é um serviço dependente de serviço. Por meio desse método explícito, os nomes dos parâmetros podem ser preenchidos em relação aleatoriamente, mas a ordem deve ser ms para vars ms. if (msgs.length == 3) {timeout (function () {win.alert (msgs.join ("/n")); msgs = [];}, 10); função myController ($ s, $ noti) {// Este é o serviço dependente do controlador. Através desse método explícito, os nomes dos parâmetros podem ser preenchidos aleatoriamente, mas o pedido deve corresponder a $ s.msgs = []; $ S.SAVEMSG = function () {this.msgs.push (this.msg); $ noti (this.msg); this.msg = ""; }; } // Especifique o material injetado // Você também pode consultar o exemplo em http://www.cnblogs.com/lclao/archive/2012/10/16/2725317.html myController.2. Injeção implícita de dependência
Um novo recurso do angular DI que permite que as dependências sejam determinadas por nomes de parâmetros. Vamos reescrever o exemplo acima para mostrar como injetar implicitamente $ janela, $ scope e notificar o serviço.
exemplo:
<! Doctype html> <html lang = "zh-cn" ng-app = "mainApp"> <head> <meta charset = "utf-8"> <title> implícito-inject-service </title> </head> <body> <div ng --Controlller = "myControlller"> <input> " ng-click = "Savemsg ()"> Salvar msg </botão> <ul> <li ng-repeat = "msg em msgs"> {{msg}} </li> </ul> </div> <script src = "../ angular-1.1.js" type = "text/javScript"> angular.module ("mainApp", [], function ($ fornece) {$ fornece.factory ("notify", function ($ window, $ timeout) {// serviço depende de serviços, dependente implicitamente, o nome é o mesmo var msgs = []; $ window.alert (msgs.Join ("/n"); notificar (this.msg);Embora isso seja muito conveniente, se precisarmos comprimir e ofuscar nosso código, isso pode fazer com que o nome do parâmetro seja alterado. Nesse caso, ainda precisamos usar uma declaração explícita de dependências.
O exposto acima são as informações sobre os serviços de injeção do AngularJs em controladores. Continuaremos a adicionar informações relevantes no futuro. Obrigado pelo seu apoio a este site!