我尝试使用ng-notifications-bar模块,我有这样的代码:

angular.module('app', [
    uiRouter,
    Common.name,
    Components.name,
    angularMaterial,
    'ngTable',
    'gridster',
    'ngNotificationsBar'
  ])
  .factory('$exceptionHandler', ['notifications', function(notifications) {
    return function(exception, cause) {
      notifications.showError({message: exception});
    };
  }]);


但出现错误:


  [$ injector:cdep]找到了循环依赖项:$ rootScope <-通知<-$ exceptionHandler <-$ rootScope <-$ timeout <-$$ rAF <-$ mdGesture


我试图修改库以使用$injector获取$ timeout和$ rootScope,但这也无济于事,也尝试使用$injectornotifications工厂获取$exceptionHandler却出现了相同的错误。

最佳答案

从角度来看,这是一个很差的设计。由于依赖性,您不能以任何形式将$rootScope注入$exceptionHandler中。

您可以使用$injector来解决这类(无法使用的)依赖性问题,您只需要确保在return函数内部使用注入的模块即可确保在调用从属模块已实际加载。例如:

// won't not be available here
var rootScope = $injector.get('$rootScope');

return function(exception, cause) {
  // will be available here
  var rootScope = $injector.get('$rootScope');
};


这是因为.get()用于在运行时获取依赖项。

关于javascript - Angular-使用ngNotificationsBar时发现循环依赖,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39829556/

10-09 15:12