Angularjs 为什么可以';我不能在Angular向工厂注入$scope吗?

Angularjs 为什么可以';我不能在Angular向工厂注入$scope吗?,angularjs,dependency-injection,Angularjs,Dependency Injection,我有一家工厂需要收听广播节目。我将$scope注入工厂,以便使用$scope.$on。但是,只要我将$scope添加到参数列表中,我就会得到一个喷油器错误 这很好: angular.module('MyWebApp.services') .factory('ValidationMatrixFactory', ['$rootScope', function($rootScope) { var ValidationMatrixFactory = {}; ret

我有一家工厂需要收听广播节目。我将
$scope
注入工厂,以便使用
$scope.$on
。但是,只要我将
$scope
添加到参数列表中,我就会得到一个喷油器错误

这很好:

angular.module('MyWebApp.services')
    .factory('ValidationMatrixFactory', ['$rootScope', function($rootScope) {
        var ValidationMatrixFactory = {};
        return ValidationMatrixFactory;
    }]);
这会引发喷油器错误:

angular.module('MyWebApp.services')
    .factory('ValidationMatrixFactory', ['$scope', '$rootScope', function($scope, $rootScope) {
        var ValidationMatrixFactory = {};
        return ValidationMatrixFactory;
    }]);

为什么我不能将
$scope
注入工厂?如果我不能,除了使用
$rootScope
,我还有什么方法来监听事件吗?

因为$scope用于将控制器连接到视图,工厂实际上并不打算使用$scope

如何向rootScope广播

$rootScope.$on()

即使不能在服务中使用$scope,也可以将该服务用作“存储”。在ReactJS上开发应用程序时,我使用了以下受AltJS/Redux启发的方法

我有一个控制器,其作用域是视图绑定到的。该控制器有一个
$scope.state
变量,该变量从具有
this.state={}
的服务获取其值。服务是唯一“允许”(由您,开发人员,这是我们自己应该遵循的规则)接触“状态”的组件

举个例子可以让这一点更加清楚

(函数(){
"严格使用",;
模块('app',['app.accounts']);
//我的模块。。。
//它可以在单独的文件中定义,如“app.accounts.module.js”`
angular.module('app.accounts',[]);
angular.module('应用程序帐户')
.service('AccountsSrv',[函数(){
var self=这个;
自我状态={
用户:false
};
self.getAccountInfo=函数(){
var userData={name:'John'};//这里可以从端点获取用户数据
self.state.user=userData;//获取数据后更新状态
};
}]);
//我的控制器,绑定到服务状态
//它可以在单独的文件中定义,如“app.accounts.controller.js”`
angular.module('应用程序帐户')
.controller('AccountsCtrl',['$scope','AccountsSrv',function($scope,AccountsSrv){
$scope.state=AccountsSrv.state;
$scope.getAccountInfo=函数(){
//…在这里做些逻辑分析
//…然后打电话给
AccountsSrv.getAccountInfo();
}
}]);
})();

用户名:{{state.user.name?state.user.name:'用户信息尚不可用。请单击下面…'}}


$scope
仅适用于控制器和视图。工厂不与视图连接。这就是为什么你不能注射它。在工厂中侦听
$rootScope
上的事件没有什么错。我已经了解到使用
$rootScope.$on()
是不好的,因为侦听器从未超出范围导致事件多次触发。这不适用于这里吗?是的,他的可能会发生,正如乔尔克多尔所说,这可能是好的,对于一个工厂来说,是必要的。我想参考这篇文章了解更多信息。
$rootScope.$on
在控制器的上下文中可能不好,但在没有
$scope
可以“走出”的工厂中就不行了@NilesTanner在你的评论中没有到这篇文章的链接。@Legion哎哟,很抱歉。这是: