У меня есть родительское состояние, контроллер и маршрут которого определены в App.js и лениво загружены:
$stateProvider.state({
name: 'Parent',
url: '/Parent',
templateUrl: 'Parent.html',
controller: "ParentController",
resolve: {
load: ['$ocLazyLoad', function ($ocLazyLoad) {
return $ocLazyLoad.load([
"/SomeService.js",
"/ParentController.js"]);
}]
}
});
Также в App.js я сохраняю ссылку на провайдера состояния
AngularApp.StateProvider = $stateProvider.state;
и поставщик маршрута:
AngularApp.AppController = $controllerProvider.register;
В противном случае контроллеры и состояния появляются неопределенными позже
Затем в ленивом загруженном родительском контроллере я определяю дочерние состояния и родительский контроллер:
AngularApp.StateProvider({
name: 'Parent.Child',
url: '/{parameter}'
});
AngularApp.AppController('ParentController', ['$scope', function ($scope) {
}]);
Это прекрасно работает и работает непосредственно с URL: localhost: 8080 / Parent
Загружается нормально и снова загружается при обновлении страницы.Переход к дочернему состоянию после того, как родительское состояние уже было переведено на
localhost:8080/Parent/ChildParameter
Также отлично работает.
Проблема возникает при попытке перейти непосредственно к дочернему состоянию (например, изновая вкладка или путем обновления страницы в дочернем состоянии) Вместо этого происходит сбой, и вместо него загружается маршрут .otherwise ()
Когда это происходит, маршрутизатор не может подтвердить, что он должен загрузить родительское состояние.Ленивый загруженный контроллер и затем продолжение в том месте, где определено дочернее состояние.
Я хотел бы избежать определения дочерних состояний в загруженных вперед js-файлах, чтобы сохранить чистоту кода, есть ли способ обойти эту проблему?