簡體   English   中英

在$ exceptionHandler的裝飾器中使用Angularjs-Toaster

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM