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).

Другие вопросы по тегам