Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript AngularJs/.provider/如何让rootScope进行广播?_Javascript_Angularjs_Broadcast_Provider - Fatal编程技术网

Javascript AngularJs/.provider/如何让rootScope进行广播?

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

现在,我的任务是重写$exceptionHandler提供程序,以便它输出带有消息的模态对话框并停止默认事件

我所做的:

在project init中,我使用方法。提供程序:

.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);
    };
  });
});