我知道您无法将$ rootScope注入应用程序的 config 阶段,我知道您可以在运行阶段注入$ rootScope,但ngDialogProvider会没有注入运行阶段...
我正在使用ngDialog,它有一个ngDialogProvider,我可以设置所有ngDailogs的默认值(我有很多)
我需要在rootScope上设置一个标志,以防止在ngDailog打开时导航。
如果我们无法在配置阶段注入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 :(得分: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中以编程方式更改它。