$ state注入onEnter()时$ state.current不同的值

时间:2014-12-15 14:03:29

标签: angularjs angular-ui-router

这是我的代码:

angular.module("LearnRouter", ["ui.router"])

.config(['$stateProvider',
  function(stateProvider) {

    stateProvider.state('state1', {
      controller: function($scope, $state) {
        $scope.state3 = function() {
          $state.go('state3');
        }
      },
      template: "<h1><i>Template1</i><div ui-view><button type='button' ng-click=state3()>State 3</button></div></h1>",
      availableOptions:["option1","option2","option3"]
    });

    stateProvider.state('state2', {
      template: "<h1>Template2</h1>"
    });

    stateProvider.state('state3', {
      parent: "state1",
      template: "<h1>Template3<div>Names: <span ng-bind=names></span</div></h1>",
      controller: function($scope, $state) {
        $scope.names=$state.current.availableOptions;
      },
      onEnter:function($state){
        console.log($state)
      }
    });
  }
])


.service('namesRepo', function() {

  this.fetch = function() {
    return ['name1', 'name2', 'name3'];
  }

})

.controller("IndexController", ["$scope", "$state",
  function($scope, $state) {

    $scope.state1 = function() {
      $state.go('state1');
    }

    $scope.state2 = function() {
      $state.go('state2');
    }
  }
]);

表示angular-ui-router用法的简单javascript。

我想测试子状态是否从父状态继承自定义字段。 显然,我得出的结论是,它至少或者至少我的结果显示了这一点。

从代码中可以看出我将$ state传递给onEnter函数。由于进入了状态(或者至少这是我理解事物的方式),当前状态必须是state3。甚至console.log都赞同这种理解

This is the result from the console.log($state)

所以当我尝试console.log($ state.current)时,结果会有所不同。它告诉我,父状态是当前状态。

This is the result from the console.log($state.current)

1 个答案:

答案 0 :(得分:2)

转换仍处于进程时,会调用

onEnteronExit个回调。在转换完全完成之前,$state.current不会更新。转换完成后,$state.current设置为&#34;到&#34; state,$ stateChangeSuccess被调用,并且调用控制器。

因此,$state.current包含&#34;来自&#34; onEnteronExit期间的州。