AngulaJS在配置阶段使用$ rootScope为ngDialogProvider,或在运行阶段使用ngDialogProvider

时间:2017-07-03 09:29:16

标签: angularjs ng-dialog

我知道您无法将$ 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;
        }
    });
}])

1 个答案:

答案 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中以编程方式更改它。