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

AngulaJS using $rootScope in config phase for ngDialogProvider, or using ngDialogProvider in run phase

我知道您不能将 $rootScope 注入到应用程序的 config 阶段,并且我知道您可以将 $rootScope 注入到 运行 阶段,但是 ngDialogProvider 没有在 运行 阶段注入...

我正在使用 ngDialog,它有一个 ngDialogProvider,我可以在其中设置所有 ngDailog 的默认值(我有很多)

我需要在 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;
        }
    });
}])

您应该在 .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;
        }
    });
}])

constant should never be changed (though it is still possible to change it programmatically in Angular 1.x).