AngulaJS использует $rootScope в фазе конфигурации для ngDialogProvider или ngDialogProvider в фазе запуска
Я знаю, что вы не можете внедрить $rootScope в фазу конфигурации приложения, и я знаю, что вы можете внедрить $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 ответ
Решение
Вы должны сделать это в .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).