Скажем, у нас есть родительско-дочерняя связь, определенная в нашем $stateProvider следующим образом:
.state('myProfile', {
url: "/my/profile",
templateUrl: 'my/profile.html',
controller: 'MyProfileController'
}).state('myProfile.edit', {
url: "/edit",
templateUrl: 'my/profile.edit.html',
controller: 'EditMyProfileController'
});
Идея здесь в том, что родительское состояние myProfile
не редактируется, но дочернее состояние myProfile.edit
- это фактическая форма для редактирования профиля. Пусть игнорируется, работает ли страница профиля - я просто общаюсь с вещами и изучаю.
Когда пользователь отправляет форму, я использую объект $state для возврата на родительскую страницу:
$scope.save = function() {
userResource.update($scope.user, function() {
SessionService.refresh();
$state.go('myProfile'); // also tried with reload: true as well
});
}
После того, как пользователь сохранит данные профиля - и он будет сохранен правильно - родительский вид не будет обновлен, если я не удалю F5 и не обновить браузер.
Одна вещь, которую я заметил, заключается в том, что если я создаю дочерний элемент myProfile.edit
в самом родителе, а не в дочернем состоянии myProfile
, эта проблема действительно исчезнет, и все будет вести себя так, как ожидалось (хотя внешний вид макета плохо как это).
Кажется, что UI Router, возможно, кэширует результат родителя, ничего не подозревая, что вещи изменились в модели и что ему нужно перезапустить контроллер?
Как я могу сохранить отношения родитель-ребенок, все еще имея родительскую страницу myProfile
, всегда выполняет свой контроллер для перезагрузки своих данных? В принципе, я хочу, чтобы это происходило всякий раз, когда используется $state
или когда нажимается ссылка, которая направляется на myProfile
. Как я могу это сделать?
И если я не могу делать то, о чем я прошу, тогда я знаю, что могу настроить кучу дочерних состояний и заставить их работать по назначению... однако, как я могу установить дочернее состояние по умолчанию для родителя? Например, допустим, что я хочу, чтобы myProfile.edit
было дочерним состоянием по умолчанию myProfile
- как я могу это сделать?
Спасибо!