Javascript AngularJs/.provider/如何让rootScope进行广播?
现在,我的任务是重写$exceptionHandler提供程序,以便它输出带有消息的模态对话框并停止默认事件 我所做的: 在project init中,我使用方法。提供程序:Javascript AngularJs/.provider/如何让rootScope进行广播?,javascript,angularjs,broadcast,provider,Javascript,Angularjs,Broadcast,Provider,现在,我的任务是重写$exceptionHandler提供程序,以便它输出带有消息的模态对话框并停止默认事件 我所做的: 在project init中,我使用方法。提供程序: .provider('$exceptionHandler', function(){ //and here I would like to have rootScope to make event broadcast }) standart注入方法不起作用 UPD:沙盒-您需要注入$rootScope: .provi
.provider('$exceptionHandler', function(){
//and here I would like to have rootScope to make event broadcast
})
standart注入方法不起作用
UPD:沙盒-您需要注入$rootScope:
.provider('$exceptionHandler', '$rootScope', function(){
//and here I would like to have rootScope to make event broadcast
})
这是你试过的吗?如果是这样,您是否有错误消息或jsfillde/plnkr来查看失败原因?您可以注入注入器并查找$rootScope 演示plunkr: 更新:也添加提供程序技术:
app.provider('$exceptionHandler', function() {
// In the provider function, you cannot inject any
// service or factory. This can only be done at the
// "$get" method.
this.$get = function($injector) {
return function(exception,cause){
var rScope = $injector.get('$rootScope');
rScope.$broadcast('exception',exception, cause);
}
};
});
我的做法-使用装饰器并在未知错误上还原到以前的异常处理程序:
app.config(function ($provide) {
$provide.decorator('$exceptionHandler', function($delegate, $injector) {
return function (exception, cause) {
if (ICanHandleThisError) {
var rootScope= $injector.get('$rootScope');
// do something (can use rootScope)
} else
$delegate(exception, cause);
};
});
});
是的,但如果它不起作用,你要么使用错误,导致它没有明显的效果,要么它应该产生一个错误。如果你做一个JSFIDLE,我们会更容易帮助你。对那些一直对我投反对票的人来说:我要求的信息只是在我要求之后才添加的。OP然后指责我询问他已经添加的信息。虽然这解决了问题,但如果您需要将
$rootScope
注入到提供程序配置中(例如此处的.provider示例:),则此方法将不起作用。它似乎可以正常工作。下面是一个例子:我想我们当时不能,但是现在,你可以做这个。$get=function($rootScope)afaik
app.config(function ($provide) {
$provide.decorator('$exceptionHandler', function($delegate, $injector) {
return function (exception, cause) {
if (ICanHandleThisError) {
var rootScope= $injector.get('$rootScope');
// do something (can use rootScope)
} else
$delegate(exception, cause);
};
});
});