gpt4 book ai didi

angularjs - 在 $exceptionHandler 的装饰器中使用 Angularjs-Toaster

转载 作者:行者123 更新时间:2023-12-04 03:01:51 25 4
gpt4 key购买 nike

我正在尝试为 $exceptionHandler 装饰器中处理的错误 toast ,如下所示,

var app = angular.module('myApp',['toaster']);

app.config(function($provide){
$provide.decorator('$exceptionHandler',function($delegate,toaster){
toaster.pop('error','text','error');
$delegate(exception, cause);
});
});

Here是plunkr。这给了我以下错误,

Error: [$injector:cdep] Circular dependency found: $rootScope <- toaster <- $exceptionHandler <- $rootScope

我正在使用 AngularJS-Toaster用于显示错误。现在如何在装饰器中注入(inject) toastr 服务?

最佳答案

您可以将 $injector 注入(inject)到您的装饰器中,并将您的注入(inject)包装在一个函数中。这会延迟 toaster 服务的注入(inject),直到您调用 $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');
}
});
});

要扩展为什么这是一个循环依赖,您必须查看注入(inject)的服务需要什么,以及在装饰器。

toaster 服务依赖于 $rootScope 并被注入(inject)到 $exceptionHandler 的装饰器中。然而,$rootScope 又依赖于$exceptionHandler。这最终会创建一个循环引用。

如果注入(inject) $http$q 而不是 toaster,您会发现相同的行为,因为它们也依赖于 $rootScope。这不是 toaster 特别是问题...而是 $rootScope 依赖项,同时尝试将行为也应用于依赖项 $rootScope.

关于angularjs - 在 $exceptionHandler 的装饰器中使用 Angularjs-Toaster,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33384646/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com