El método de carga del servicio en el controlador como recurso de dependencia es muy similar al método de cargarlo en otros servicios.
Dado que JavaScript es un lenguaje dinámico, DI no puede averiguar qué servicio debe inyectarse a través de tipos estáticos (como en los idiomas escrita estática). Por lo tanto, necesitamos especificar el nombre del servicio a través de la propiedad $ inyect, que es una variedad de cadenas que contienen los nombres de servicio que deben inyectarse. La importancia del orden de identificación de servicio: el orden de los parámetros en el método de fábrica es consistente con el orden de servicio en la matriz. Los nombres de parámetros de los métodos de fábrica no son importantes, pero como de costumbre, coinciden con la identificación del servicio uno por uno, y los beneficios de hacerlo se discutirán a continuación.
1. Inyección de dependencia explícita
function myController ($ scope, $ loc, $ log) {$ scope.firstmethod = function () {// usa $ ubicación servicio $ loc.sethash (); }; $ scope.secondmethod = function () {// use $ log service $ log.info ('...')};} mycontroller. $ inject = ['$ ubicación', '$ log'];ejemplo:
< 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 ("mainApp", [], function ($ proporcion) {$ proporcionar.factory ("notificar", ["$ window", "$ timeOut", function (win, timeOut) {// Este es un servicio dependiente del servicio. A través de este método explícito, los nombres de los parámetros se pueden completar aleatoriamente, pero el orden debe ser correspondiente a var Msgs = []; if (msgs.length == 3) {timeOut (function () {win.alert (msgs.Join ("/n")); msgs = [];}, 10); función mycontroller ($ s, $ noTI) {// Este es el servicio dependiente del controlador. A través de este método explícito, los nombres de los parámetros se pueden completar aleatoriamente, pero el orden debe corresponder a $ s.msgs = []; $ s.savemsg = function () {this.msgs.push (this.msg); $ Noti (this.msg); this.msg = ""; }; } // Especifique las cosas inyectadas // También puede consultar el ejemplo en http://www.cnblogs.com/lclao/archive/2012/10/16/2725317.html mycontroller. $ Inject = ['$ encope', 'notificar']; </script> </body> </html>2. Inyección de dependencia implícita
Una nueva característica de Angular DI que permite que las dependencias se determinen con los nombres de los parámetros. Reescribamos el ejemplo anterior para mostrar cómo inyectar implícitamente $ Window, $ alcance y notificar el servicio.
ejemplo:
< 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 ("mainApp", [], function ($ show) {$ show.factory ("notificar", function ($ window, $ timeout) {// el servicio depende de los servicios, implícitamente depender, el nombre es el mismo var msgs = []; return function (msgs.push (msg); if (msgs.length == 3) {$ timeOut (function () $ Windows.alert (msgs.Join ("/n"); notificar (this.msg);Aunque esto es muy conveniente, si necesitamos comprimir y ofuscar nuestro código, esto puede hacer que se cambie el nombre del parámetro. En este caso, aún necesitamos usar una declaración explícita de dependencias.
Lo anterior es la información sobre los servicios de inyección de AngularJS en controladores. Continuaremos agregando información relevante en el futuro. ¡Gracias por su apoyo para este sitio!