undefined macht Während Winkel Lernen, Lesen a blog die aufwendige dassangular.injector.invoke mein Controller
können wir Fabrik/Service außerhalb der Steuerung zugreifen angular.injector() verwenden, aber wenn ich das versuchen, gibt es mein Haupt-Controller ist undefined Fehler und alles funktioniert nicht mehr.
siehe working plunker
mit kommentierten Täter Code block.Below ist Hauptcode der Linien angular.injector(["app"]).invoke
var app = angular.module('AlphaModule', []);
// service added
app.service('tea', function(){
return {
teaType: function(teaType) {
console.log('Service => Morning tea must be ' + teaType);
},
sayHello: function(msg) {
console.log('Service => Hello ' + msg);
}
};
});
// ERROR in console when uncomment this code block
angular.injector(["app"]).invoke(function(tea){
tea.sayHello('Yellow');
});
// main controller definition
var AlphaController = function($injector, tea) {
var vm = this;
vm.timeNow = new Date().getTime();
....
};
app.controller('AlphaController', AlphaController);
Bitte markieren Sie mit, was mir fehlt/falsch hier?
Meine Vermutung:
Ich habe auch gelesen, dass $ Injektor Singletons sind. Was genau bedeutet das? können wir $injector
nur einmal verwenden! oder möglicherweise ist dies das Problem, da ich $ Injektor in .controller
auch verwendet habe
Während die akzeptierte Antwort richtig ist, tut es nicht, was Sie denken, es tut. 'angular.injector' erstellt einen neuen Injektor, es ruft nicht den Injektor ab, der mit der App verknüpft ist, die Sie bereits erstellt haben. Services sind Singletons in dem Sinne, dass sie nur einmal pro Injektor erstellt werden. So wird der "Tee" -Service in Ihrem "Aufruf" nicht der gleiche wie der "Tee" -Service in Ihrer App sein. – tasseKATT
werden Sie am Beispiel "der Tee-Service in Ihrer Berufung wird nicht der gleiche wie der Tee-Service in Ihrer App sein". Ich bin sehr daran interessiert zu lernen. –
Wenn Ihre Anwendung bootstrapped wird ein Injektor erstellt und zugeordnet, wenn Ihre App. Dienste, die in Ihrer App verwendet werden, werden nur einmal erstellt (pro Injektor, dh pro App). 'angular.injector' erstellt einen neuen Injektor und erstellt alle benötigten Dienste noch einmal. Die Dienstinstanz ist also nicht identisch, was zu einem Problem führen kann, wenn Ihr Dienst einen Status behält. – tasseKATT