Was sind die Unterschiede zwischen $injector.instantiate
, $injector.get
und $injector.invoke
in AngularJS?
Antwort
mit dem folgenden Service:
app.service('myService', function ($q, $http) {
return {
q: $q,
http: $http
};
});
$ injector.get (Name, [Anrufer]);
Gibt eine Instanz des angeforderten Service zurück.
$injector.get('myService');
// { q: $q, http: $http }
$ injector.invoke (fn, [self], [Einheimischen]);
Ruft die angegebene Methode auf und übergibt die angegebenen Argumente vom $ injector.
$injector.invoke(function (myService, $http) {
console.log(myService); // { q: $q, http: $http };
console.log(this); // { v: 'im this!' };
console.log($http); // null
}, { v: 'im this!' }, { $http: null });
$ injector.instantiate (Type, [Einheimische]);
Erstellt eine neue Instanz des angegebenen Typs. Verwendet eine Konstruktorfunktion und ruft dann die neue Instanz mit den in der Konstruktorannotation angegebenen Argumenten auf.
Angenommen, die folgende 'Klasse':
function Person (fName, lName, $http, $q) {
return {
first_name: fName,
last_name: lName,
http: $http,
q: $q
}
}
Wenn wir nun eine neue Person in unserem Controller erstellen wollten, könnten wir es so machen:
app.controller('...', function ($injector) {
var $http = $injector.get('$http');
var $q = $injector.get('$q');
var p = new Person('kasper', 'lewau', $http, $q);
console.log(p); // { first_name: 'kasper', last_name: 'lewau', http: $http, q: $q };
});
Person
Stellen Sie sich vor hatte ~ 20 Abhängigkeiten, und wir holten jeden einzelnen mit der $injector.get
Methode.
Umständlich! Und - Sie müssten Ihre Parameter & Argumente synchron halten. ugh.
Stattdessen können Sie dies tun:
app.controller('...', function ($injector) {
var p = $injector.instantiate(Person, {
fName: 'kasper',
lName: 'lewau'
});
console.log(p); // { first_name: 'kasper', last_name: 'lewau', http: $http, q: $q };
});
Und - wenn wir wollten, könnten wir Einheimischen zum .instantiate
Anruf liefern, um außer Kraft zu setzen, was die interne $injector.get()
normalerweise erhalten, wenn instanziieren.
var p = $injector.instantiate(Person, {
fName: 'kasper',
lName: 'lewau'
}, { $http: 'Nothing!', $q: 'Nothing!' });
console.log(p); // { first_name: 'kasper', last_name: 'lewau', http: 'Nothing!', q: 'Nothing!' };
Ich hoffe, dass die Differenz zwischen den drei erklärt.Wenn Sie mehr Informationen über ihre Unterschiede benötigen würde ich diese Artikel empfehlen:
- http://taoofcode.net/studying-the-angular-injector/
- http://taoofcode.net/studying-the-angular-injector-annotate/
- http://taoofcode.net/studying-the-angular-injector-invoke/
- http://taoofcode.net/studying-the-angular-injector-getservice/
- http://taoofcode.net/studying-the-angular-js-injector-instantiate/
Weitere Noten Kasper Lewau Antwort, weil ich keine Kommentare hinzufügen kann.
$ injector.invoke (fn, [selbst], [lokal], [serviceName]); Klassenkonstruktor oder nicht (es hat Auto-Check innen)
- Kann für jede Funktion verwendet werden.
$ injector.instantiate (Typ, [lokal]);
- Sollte nur für Klassenkonstruktoren verwendet werden, oder es wird leeres Objekt konstruieren {}
- 1. AngularJS: Kopieren vs erweitern
- 2. angularjs value vs factory
- 3. AngularJS vs JQuery
- 4. AngularJS vs ReactJS
- 5. AngularJS in HEAD vs BODY
- 6. Angularjs: ocLazyLoad vs Requirejs
- 7. AngularJS $ routeParams vs $ stateParams
- 8. jQuery Mobile vs AngularJs Seitennavigation
- 9. $ location.path (Pfad) vs $ location.url (url) in AngularJS
- 10. AngularJS Vorlage vs templateURL in Richtlinie
- 11. Klasse vs Paket vs Modul vs Komponente vs Container vs Service vs Plattform in Java Welt
- 12. $ Injektor vs einen Dienst direkt
- 13. Metaphon vs Levenshtein vs Soundex vs Hamming
- 14. AngularJS ngTranscluded, angular.noop und Interpolation VS Ausdruck
- 15. AngularJS Directive Beschränken A vs E
- 16. ACE vs Boost vs Poco vs wxWidgets
- 17. VS 2013 MSTest vs nUnit vs xUnit
- 18. Opa vs Dart vs Haxe vs Coffee
- 19. body.scrollTop vs documentElement.scrollTop vs window.pagYOffset vs window.scrollY
- 20. RobotFramework vs Winkelmesser für AngularJS-Test
- 21. AngularJS Core vs. Angular JS Nuget-Pakete?
- 22. Standort vs GeoPoint vs 1E6 vs Aufladen
- 23. angularjs ng-show vs neue Vorlagen
- 24. & vs * und | vs +
- 25. Akkumulieren vs falten vs reduzieren vs komprimieren
- 26. Inline vs __inline vs __inline__ vs __forceinline?
- 27. Angularjs vs-repeat: blättern Sie zu Element
- 28. pure html5 vs jquery mobile/angularjs
- 29. SpiderMonkey vs JavaScriptCore vs?
- 30. Exec vs ExecWait vs ExecShell vs nsExec :: Exec vs nsExec :: ExecToLog vs nsExec :: ExecToStack vs ExecDos vs ExeCmd
$ aufrufen Hat, $ aufrufen bekommen verwendet, initialte() und $ invoke.invoke() ?? –
Ich habe nicht die Quelle in diesem Moment vor mir, aber ich denke ja. Überprüfen Sie den Quellfreund. –
Diese Antwort sollte ein Teil von Angular $ Injektor docs sein –