ui-router $urlRouterProvider ожидает загрузки всех состояний

Я пытаюсь динамически загружать несколько состояний, объединяя их из некоторых разнородных файлов.

Я собираю их все с помощью $http.get, а затем добавляю все с помощью $ stateProvider.state (name, config).

Все хорошо здесь.

Проблема в том, что если я введу другой URL, кроме корневого URL "/", этот же URL никогда не будет преобразован в правильное состояние.

Кажется, что если я загружаю приложение из корневого состояния и оттуда перехожу, $urlRouterProvider может совпадать со всеми загруженными состояниями, но, если я пытаюсь войти в приложение из дочернего состояния, например "/#/anotherpage msgstr ", он не может совпадать ни с одним URL / состоянием и возвращается к .otherwise ('/').

Это как если бы он пытался разрешить URL, не дожидаясь загрузки всех состояний.

Я использую $urlRouterProvider.deferIntercept(), чтобы остановить его, и после настройки просто включаю синхронизацию.

app.config(configure).run(['$urlRouter', function($urlRouter){
        $urlRouter.sync();
        $urlRouter.listen();
    }]);

Как мне убедиться, что $urlRouterProvider ждет, пока все состояния загружаются во время .config (), а затем пытается найти правильное состояние?

Благодарю.

1 ответ

Я не совсем уверен, что то, что у меня было, связано, но я опубликую это: я создавал какой-то объект в фазе конфигурации. Конфигурация объекта была переопределена, поэтому я не мог построить состояние на этапе конфигурации моего провайдера. Поэтому я переместил вызовы $stateProvider и $urlRouterProviders в $get моего провайдера.

Если я попытался нацелиться на одно из сгенерированных состояний, это не сработало при первой загрузке страницы или обновлении. Я должен был использовать "module.run(myProvider){}", чтобы заставить экземпляр моего провайдера заставить его работать. Я предполагаю, что мой app.run был запущен до того, как $ urlRouterProvider разрешил что-либо.

Другим решением может быть использование отсрочки начальной загрузки вашего приложения, удаление ng-app и использование angular.bootstrap, когда вы будете готовы.

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