2017-07-03 91 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

相關問題