[英]Using Angularjs-Toaster inside the decorator of $exceptionHandler
我試圖在$ exceptionHandler裝飾器中處理錯誤,如下所示,
var app = angular.module('myApp',['toaster']);
app.config(function($provide){
$provide.decorator('$exceptionHandler',function($delegate,toaster){
toaster.pop('error','text','error');
$delegate(exception, cause);
});
});
這是傻瓜。 這給了我以下錯誤,
Error: [$injector:cdep] Circular dependency found: $rootScope <- toaster <- $exceptionHandler <- $rootScope
我正在使用AngularJS-Toaster來顯示錯誤。 我現在如何在裝飾器內注入烤面包機服務?
您可以將$injector
注入裝飾器並將注入包裝在函數中。 這會延遲多士服務的注入,直到您調用$exceptionHandler
,從而防止出現循環依賴。
var app = angular.module('myApp',['toaster']);
app.config(function($provide){
$provide.decorator('$exceptionHandler',function($delegate,$injector){
return function (exception, cause) {
var toaster = $injector.get('toaster');
toaster.pop('error','text','error');
}
});
});
為了擴大為什么這是一個循環依賴,你要看看被需要的是雙方注入的服務,以及什么是裝飾發生。
toaster
服務依賴於$rootScope
,並被注入裝飾器以獲取$exceptionHandler
。 但是, $rootScope
反過來依賴於$exceptionHandler
。 這最終會創建一個循環引用。
如果$http
或$q
被注入而不是toaster
你會發現相同的行為,因為它們也依賴於$rootScope
。 它不是toaster
明確這是問題...而它是$rootScope
依賴,而試圖也適用行為的依賴$rootScope
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.