Angularjs angular.injector.invoke使我的控制器未定义
在学习角度的同时,阅读其中的详细说明 我们可以使用访问控制器外的工厂/服务,但当我尝试此操作时,它会提示我的主控制器存在未定义错误,一切都停止工作 请参阅带有注释的罪魁祸首代码块。下面是使用Angularjs angular.injector.invoke使我的控制器未定义,angularjs,singleton-type,Angularjs,Singleton Type,在学习角度的同时,阅读其中的详细说明 我们可以使用访问控制器外的工厂/服务,但当我尝试此操作时,它会提示我的主控制器存在未定义错误,一切都停止工作 请参阅带有注释的罪魁祸首代码块。下面是使用angular.injector([“app”])的行的主代码。invoke var app = angular.module('AlphaModule', []); // service added app.service('tea', function(){ return { t
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 );
请强调我在这里遗漏了什么/做错了什么
我猜:
我还读到,$injector是单例的。这到底意味着什么?我们只能使用
$injector
一次!或者这可能是问题所在,因为我在.controller
中使用了$injector,而且您提到的模块名称是错误的。模块名称实际上是AlphaModule
而不是app
angular.injector([“AlphaModule”]).invoke(函数(tea){
茶。说你好(“黄色”);
});代码>您提到的模块名称错误。模块名称实际上是AlphaModule
而不是app
angular.injector([“AlphaModule”]).invoke(函数(tea){
茶。说你好(“黄色”);
});代码>非常感谢。我不明白为什么错误不那么清楚:(请你看看我之前的问题==>这可能会产生误导。请看我对这个问题的评论。非常感谢。我不明白为什么错误不那么清楚:(请你看一下我之前的问题==>这可能会产生误导。请参阅我对该问题的评论。虽然被接受的答案是正确的,但它不会做你认为它会做的事。angular.injector
创建一个新的注入器,它不会检索与你已经创建的应用程序关联的注入器。服务是单例的在某种意义上,每个注入器只创建一次。因此,invoke
中的tea
服务将与应用程序中的tea
服务不同。请详细说明“您的invoke中的tea服务将与应用程序中的tea服务不同”举个例子。我真的很想学习。当你的应用程序启动时,将创建一个注入器,并在你的应用程序中关联。应用程序中使用的服务将只创建一次(每个注入器,即每个应用程序).angular.injector
创建一个新的注入器,并将再次创建所需的所有服务。因此,服务实例将不同,如果您的服务保持任何状态,这将导致问题。请参阅:虽然接受的答案是正确的,但它不会执行您认为它会执行的操作。angular.injector
创建一个新的注入器,它将不检索与您已创建的应用程序关联的注入器。服务是单例的,因为每个注入器只创建一次。因此,您的调用中的tea
服务将与应用程序中的tea
服务不同。您是否详细说明举例来说,“调用中的tea服务将与应用中的tea服务不同”。我非常想了解。当应用程序启动时,将创建一个注入器,并在应用程序启动时关联。应用程序中使用的服务将只创建一次(每个注入器,即每个应用程序).angular.injector
创建一个新的injector,并将再次创建所需的所有服务。因此,服务实例将不同,如果您的服务保持任何状态,这将导致问题。请参阅: