Warum oder warum sollte ich Winkel $ Injector nicht selbst injizieren statt getrennte und benannte Abhängigkeiten als Parameter in die Konstruktorfunktion eines Controllers zu injizieren?
Antwort
Während des $ Injektor-Dienst würde gut funktionieren, kann ich aus zwei Gründen ein, warum ich persönlich würde es nie tun:
- Es ist ein Streit, der völlig unnötig ist
- Es verschleiert, was die Abhängigkeiten für eine Komponente oder sind.
Zur Veranschaulichung sehen Sie den Unterschied zwischen diesen beiden:
app.controller('myController', function($scope, myService) {
})
und
app.controller('myController', function($injector) {
var $scope = $injector.get('$scope');
var myService= $injector.get('myService');
})
Die beiden obigen Beispielen das gleiche tun, aber ich glaube, die erste in der Absicht viel klarer ist .
Beachten Sie jedoch, dass es Situationen gibt, in denen der direkte Einsatz des Injektors erforderlich ist: wenn eine zirkuläre Abhängigkeit besteht. Nehmen Sie diese (dumme) Beispiel:
app.factory('service1', function(service2) {
return {
someFunction: function() {
return service2.otherFunction();
},
otherFunction: function() {
return 'result from service 1 other function';
}
}
});
app.factory('service2', function(service1) {
return {
someFunction: function() {
return service1.otherFunction();
},
otherFunction: function() {
return 'result from service 2 other function';
}
}
});
Dieses in einem Fehler zurückkehren würde, da der Injektor nicht service1 und service2 vor dem anderen schaffen. In diesem Fall könnten Sie Folgendes tun:
app.factory('service1', function(service2) {
return {
someFunction: function() {
return service2.otherFunction();
},
otherFunction: function() {
return 'result from service 1 other function';
}
}
});
app.factory('service2', function($injector) {
return {
someFunction: function() {
var service1 = $injector.get('service1');
return service1.otherFunction();
},
otherFunction: function() {
return 'result from service 2 other function';
}
}
});
Hinweis, wie service1 wird nicht mehr in service2 injiziert, werden aber nur von dem Injektor gefragt, wenn die entsprechende Funktion aufgerufen wird, wobei an diesem Punkt nicht mehr da ist eine Race-Bedingung .
Es gibt Anwendungsfälle, in denen Ihre Abhängigkeit verfügbar sein kann oder nicht, was mit dem Dienst $ injector geschehen kann. Ein Beispiel wäre der Dienst "$ animate", bei dem viele Bibliotheken dieses "$ injector" -Muster verwenden – devqon
- 1. AngularJS Service Injector Fehler
- 2. angularJS, "[$ injector: modulerr]"
- 3. AngularJS Fehler [$ injector: modulerr]
- 4. AngularJS $ UibModal triggern [$ injector: unpr]
- 5. AngularJS: Uncaught Fehler: [$ injector: modulerr]
- 6. AngularJS Fehler: [$ injector: unpr] Unbekannter Provider
- 7. AngularJS: Unterschied zwischen Injektionsparameter und $ Injector
- 8. AngularJS: Fehler: $ injector: unpr in einfachem Skript
- 9. $ injector: modulerr Modul Fehler in angularjs 1
- 10. Uncaught Fehler: [$ injector: modulerr] - AngularJS funktioniert nicht
- 11. Angularjs Fehler: Uncaught Fehler: [$ injector: modulerr]
- 12. AngularJS - Fehler: $ injector: unpr Unbekannter Provider userService
- 13. Immer erhalten [$ injector: modulerr] Fehler in AngularJS
- 14. Fehler: $ injector: undef Undefinierter Wert in angularjs
- 15. Injector Fehler mit Angulartics mit AngularJS
- 16. AngularJS Fehler: $ injector: unpr Unbekannter Provider - $ modalInstanceProvider
- 17. Fehler: $ injector: unpr Unbekannter Provider - AngularJS
- 18. Fehler: [$ injector: unpr] http://errors.angularjs.org/1.5.7/$injector
- 19. Injector Hierarchie/Child Injector Erklärung?
- 20. AngularJS - "Uncaught Fehler: [$ injector: modulerr"] Nachricht in einer einfachen App
- 21. Wie zu lösen angularjs Uncaught Fehler: [$ injector: modulerr]?
- 22. AngularJS: $ Injector: Unpr Fehler bei der Verwendung von ngAnimate
- 23. Fehler: [$ injector: unpr] Unbekannter Provider: in AngularJS-Servicetest
- 24. AngularJS [$ injector: modulerr] Fehler beim Instanziieren des Moduls
- 25. Injektion von Alasql in AngularJS: Uncaught Fehler: [$ injector: modulerr]
- 26. $ injector: unpr angularjs beim Injizieren eines Service in den Controller
- 27. AngularJS - Uncaught Fehler: [$ injector: modulerr] beim Versuch, Module zu kombinieren
- 28. angularjs> router resolve> "Fehler: [$ injector: unpr] Unbekannter Provider"
- 29. Angular JS Injector: Moduler
- 30. Fehler: $ Injector: Nomod Modul nicht verfügbar
"* $ injector wird verwendet, um Objektinstanzen wie vom Provider definiert zu erhalten, Typen zu instanziieren, Methoden aufzurufen und Module zu laden. * [Angularjs Dokumente für' $ injector'] (https://docs.angularjs.org/api/auto/service/$ injektor). " Es ist eine Frage des Nutzens, ich sehe insbesondere keine Gründe dafür, dies auf einem Controller zu verwenden. –