У меня две проблемы с переходом между состояниями ui-router:
Код, который я использую:
$stateProvider
.state("root.test", {
abstract: true,
url : "/abc",
template: '<ui-view/>'
})
.state("root.test.edit", {
url : "/:testId",
views: {
"@": {
template : require('../edit.html'),
controller: "TestEditController"
}
},
params: {
testObject: {value: null}
},
redirectTo: 'root.test.edit.select',
resolve: {
testObject: function () {
console.info('test object resolved');
}
}
})
.state("root.test.edit.select", {
url : "/select",
views: {
"[email protected]": {
template : require('../select.html'),
controller: "TestEditSelectController"
}
},
resolve: {
selectObject: function () {
console.info('select object resolved');
},
}
})
.state("root.test.edit.select.dialogBox", {
params: {
testObject: {value:null}
},
resolve: {
testObject: function () {
console.info('dialog box opens');
},
},
onEnter: ['$state', '$uibModal',
function ($state, $uibModal) {
$uibModal.open({
template : require('../dialogBox.html'),
controller: 'DialogBoxController',
resolve : {
testObject: function () {
return testObject;
}
}
}).result.then(function (testObject) {
$state.go('root.test.edit.select', { testObject: testObject}, {reload: true});
}, function () {
$state.go('root.test.edit.select');
}
);
}]
})
Для первой проблемы, упомянутой выше:
Если я нахожусь в состоянии root.test.edit.select и когда я нажимаю кнопку, чтобы открыть диалоговое окно, которое является состоянием root.test.edit.select.dialogBox, test object resolved -> select object resolved -> dialog box opens, все печатается на консоли, что означает, что все родители разрешены. Но когда я закрываю диалоговое окно и открываю его снова, печатается только dialog box opens, как и должно быть даже при первом открытии диалогового окна.
Для второй проблемы, упомянутой выше:
Если я нахожусь в состоянии root.test.edit.select и обновляю страницу с помощью кнопки браузера, печатается test object resolved -> select object resolved -> test object resolved -> select object resolved, т.е. оба родительских и дочерних объекта разрешаются дважды.
Я проверил свои ошибки, как упомянул здесь, но все в порядке в соответствии с этим сообщением.
@JCFord Почему это нестандартный функционал? Вы можете дать мне знать, как это обойти?
Моя ошибка. redirectTo - это встроенная функция ui-router 1.0. В любом случае закомментируйте код перенаправления и перехода между состояниями. Уменьшите конфигурацию состояния до минимума, а затем начните повторно добавлять функции, следя за поведением разрешения. Вот как вы можете его отследить.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Это может быть результатом вашей нестандартной функции redirectTo или наличия
$state.$goв вашем обработчикеonEnter. По задумке маршрутизатор выполнит решение только один раз и только в том случае, если состояние еще не активно.