发出$ rootScope接收事件我已经创建了一个工厂提供我自己的实现角度的$ exceptionHandler的的。 此工厂在$ rootScope上发出一个事件来向侦听器发出发生错误的信号。 我的监听器在正在监视$ rootScope。$ on事件的指令中定义。一切似乎都很好,因为我的工厂实例拦截异常并发出错误事件。然而,据说听取该事件的指示从未接收到该事件。什么是导致该事件被指令中的监听器错过的断开连接?不是由我厂
澄清:该事件(eventing)依赖于发射和完全上$ rootscope消耗,以避免下游广播事件。这是通过设计和以前的工作,或者至少似乎工作在一个httpLoader和一个httpErrorHandler,我写的基于几个使用相同的策略的实现。 http://plnkr.co/edit/N0JwYJdxPLur4xYZTUP1?p=info
Plunker:http://plnkr.co/edit/LDbRa0Ew255fOd0EunAq?p=preview
angular.module('demo.services',[]);
angular.module('demo.directives',[]);
angular.module('demo',['demo.services','demo.directives']);
angular.module('demo')
.controller('demoCtrl', function($scope){
$scope.message="Generate Error";
$scope.generateError =function(){
var x;
x.foo.oops = ':(';
}
});
angular.module('demo.services')
.factory('$exceptionHandler', function() {
var $injector = angular.injector(['ng']);
return function errorCatcherHandler(exception, cause) {
rootScope = $injector.get('$rootScope');
rootScope.$emit("httpError",exception);
console.error(exception);
};
});
angular.module('demo.directives')
.directive('ngHttpError', ['$rootScope',
function ($rootScope) {
return {
scope: {
title: '@',
},
template: '<div ng-click="showError=false"' +
'ng-show="showError">'+
'ERROR! {{errorModel | json}}' +
'</div>',
link: function ($scope) {
var showError;
$scope.showError = false;
$scope.errorModel = {};
showError = $scope.showError;
var initScope = function(e,m){
console.log(m);
$scope.errorModel = m;
$scope.showError=true;
}
$rootScope.$on("httpError", initScope);
}
};
}
]);
angular.bootstrap(document,['demo']);
只有牛逼我不希望将事件广播到儿童范围。这包含的消息传递策略完全是以$ rootscope为目的的。请参阅:http://plnkr.co/edit/N0JwYJdxPLur4xYZTUP1?p=preview – mccainz 2014-10-02 18:19:54
BTW:你测试,这是这个问题,并证实了它? – mccainz 2014-10-02 18:31:28
好吧,我已经尝试从您的'generateError()'函数$广播 - 并且发射不工作(如预期根据我写在我的答案)。现在,我试图找出为什么从你的异常处理广播不起作用:) – 2014-10-02 18:33:11