gpt4 book ai didi

javascript - 在拦截器中使用 `$mdToast` 触发循环依赖

转载 作者:数据小太阳 更新时间:2023-10-29 06:05:42 28 4
gpt4 key购买 nike

问题:

如何在拦截器中使用 $mdToast 而不触发错误?

设置:

拦截器定义:

(function () {
'use strict';

angular
.module('app.components.http-errors-interceptors')
.factory('HttpError500Interceptor', HttpError500Interceptor);

/* @ngInject */
function HttpError500Interceptor($q,
$mdToast,
$filter) {

var interceptor = {};
interceptor.responseError = responseError;

function responseError(responseError) {
if (responseError.status === 500) {
$mdToast.show($mdToast.simple()
.content($filter('translate')('APP.COMPONENTS.HTTP_ERRORS_INTERCEPTORS.500'))
.position('bottom right')
.hideDelay(5000));
}
return $q.reject(responseError);
}

return interceptor;
}
})();

拦截器配置:

(function () {
'use strict';

angular
.module('app.components.http-errors-interceptors')
.config(moduleConfig);

/* @ngInject */
function moduleConfig($httpProvider) {
$httpProvider.interceptors.push('HttpError500Interceptor');
}
})();

问题:

当我加载应用程序时,它会触发以下错误:

Uncaught Error: [$injector:cdep] Circular dependency found: $http <- $templateRequest <- $$animateQueue <- $animate <- $$interimElement <- $mdToast <- HttpError500Interceptor <- $http <- $templateFactory <- $view <- $state

最佳答案

过去对我有帮助的一个解决方法是使用 $injector 在运行时而不是在配置时获取依赖项。所以,像这样:

  /* @ngInject */
function HttpError500Interceptor($q,
$injector,
$filter) {
function responseError(responseError) {
var $mdToast = $injector.get('$mdToast');

当您的循环依赖不会导致问题时(在本例中可能不会),这将起到作用。

关于javascript - 在拦截器中使用 `$mdToast` 触发循环依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35119231/

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