2017-07-03 99 views
0

我知道你不能注入$ rootScope到应用程序的配置阶段,我知道,你可以在运行注入$ rootScope阶段,但ngDialogProvider不会在运行阶段注入...

我使用ngDialog,它有一个ngDialogProvider在那里我可以把我所有ngDailogs的默认值(我有很多)

我需要在rootScope上设置一个标志来防止ngDai导航日志已打开。

如果我们无法在配置阶段注入rootScope,我该如何实现这一目标?

.config(['$rootScope','ngDialogProvider', function ($rootScope,ngDialogProvider) { 
    // Inject Error: $rootScope cannot be injected here 
    ngDialogProvider.setDefaults({ 
     onOpenCallback: function() { 
      $rootScope.preventNavigation = true; 
     }, 
     preCloseCallback: function() { 
      $rootScope.preventNavigation = false; 
     } 
    }); 
}]) 

回答

0

你应该.run

.run(['$rootScope','ngDialogProvider', function ($rootScope,ngDialogProvider) { 
    // Inject Error: $rootScope cannot be injected here 
    ngDialogProvider.setDefaults({ 
     onOpenCallback: function() { 
      $rootScope.preventNavigation = true; 
     }, 
     preCloseCallback: function() { 
      $rootScope.preventNavigation = false; 
     } 
    }); 
}]) 
ngDialogProvider is available in .config phase. Need to check if it is available on .run phase or not. 

编辑1做到这一点:你可以使用全局变量:

app.constant(‘preventNavigation’,false or true); 

.config(['ngDialogProvider','preCloseCallback', function (ngDialogProvider,preCloseCallback) { 
    ngDialogProvider.setDefaults({ 
     onOpenCallback: function() { 
      preventNavigation = true; 
     }, 
     preCloseCallback: function() { 
      preventNavigation = false; 
     } 
    }); 
}]) 

不变应该永远不要改变(尽管它仍然可以在Angular 1.x中以编程方式更改它) 。

+0

感谢您的回答,但我现在在ngDialogProvider上收到注射器错误 – johan

+0

ngDialogProvider在.config阶段可用。需要检查它是否可用.run阶段或不。 – Ved

+0

是的,它在运行阶段是不可用的 – johan