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,并将再次创建所需的所有服务。因此,服务实例将不同,如果您的服务保持任何状态,这将导致问题。请参阅: