我想知道为什么在从子状态更改为父状态时未调用onEnter
函数?是否有任何其他函数被调用?我试过这个:
$stateProvider.state('stateA', {
url: '/stateA',
views: {
'content': {
templateUrl: 'views/Aview.html',
controller: 'ControllerA'
},
'dialog': {
template: "<div ui-view='dialog'></div>"
}
},
onEnter: function ($state, olSelectInteractionService){
// IS NOT getting called
},
onExit: function (olSelectInteractionService){
}
});
$stateProvider.state('stateA.sub', {
url: '/sub/:id',
views: {
'dialog': {
templateUrl: 'views/Bview.html',
controller: 'ControllerB', // This Controller does something like $state.go("stateA");
resolve: {
ad: function (AdLoader, $stateParams) {
return AdLoader($stateParams.id);
}
}
}
}
});
答案 0 :(得分:1)
嗯,答案是:
从孩子导航到父 -
onEnter
时无法触发 - 因为我们已经了父州。当子状态为init时,其父级必须也是
但是在你的代码中有评论:
...
controller: 'ControllerB', // This Controller does something like $state.go("stateA");
resolve: {
...
特别是:
此控制器执行类似$ state.go(“stateA”);
的操作
我们可以调整那个电话:
$scope.goToParent = function(){$state.go('parent', null, {reload : true});}
有a working plunker。它表明,当我们处于子状态时,这不会重新触发onExit:
<a ui-sref="parent"> // we already are in parent state
但这会:
<button ng-click="goToParent()">
请参阅:go(to, params, options) (主要是 reload
)
...
options
(可选)对象选项对象。选项包括:
- location - {boolean = true | string =} - 如果为true,则会更新位置栏中的网址,如果为false,则不会。如果是字符串,则必须为“替换”,这将更新网址并替换上一条历史记录。
- 继承 - {boolean = true},如果为true,则会从当前网址继承网址参数。
- relative - {object = $ state。$ current},当使用相对路径(例如'^')进行转换时,定义哪个州是相对的。
- 通知 - {boolean = true},如果为true,则会广播$ stateChangeStart和$ stateChangeSuccess事件。
- 重新加载(v0.2.5) - {boolean = false},如果为true,则强制转换,即使状态或参数没有改变,也就是重新加载相同的状态。它与reloadOnSearch不同,因为当你想在一切都相同时强制重新加载时你会使用它,包括搜索参数。
检查here