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, когда вы будете готовы.