从Substate更改为Parentstate时如何调用onEnter?

时间:2014-12-23 09:06:58

标签: angularjs angular-ui-router

我想知道为什么在从子状态更改为父状态时未调用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);
      }
    }
  }
}
});

1 个答案:

答案 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