在我的一个Angular控制器中,我有这个:
// controller A
$rootScope.$on("myEventFire", function(event, reload) {
someAction();
});
Run Code Online (Sandbox Code Playgroud)
在另一个控制器中我有这个:
// controller B
$scope.openList = function(page) {
$rootScope.$broadcast('myEventFire', 1);
}
Run Code Online (Sandbox Code Playgroud)
现在,这是一个单页应用程序.当我最初转到控制器A并尝试触发此事件时,someAction()将被执行一次.如果我离开并再次回到控制器A并做同样的事情,someAction()会被执行两次.如果我再做一次,它会发生三次,依此类推.我在这做错了什么?
我有一个需要收听广播事件的工厂.我注入$scope了工厂,所以我可以使用$scope.$on.但是一旦我添加$scope到参数列表中,我就会得到一个喷油器错误.
这很好用:
angular.module('MyWebApp.services')
.factory('ValidationMatrixFactory', ['$rootScope', function($rootScope) {
var ValidationMatrixFactory = {};
return ValidationMatrixFactory;
}]);
Run Code Online (Sandbox Code Playgroud)
这会引发进样器错误:
angular.module('MyWebApp.services')
.factory('ValidationMatrixFactory', ['$scope', '$rootScope', function($scope, $rootScope) {
var ValidationMatrixFactory = {};
return ValidationMatrixFactory;
}]);
Run Code Online (Sandbox Code Playgroud)
为什么我不能注入$scope工厂?如果我不能,除了使用之外,我有没有办法听取其他事件$rootScope?