为什么$ state.current是角度控制器中的空白对象

时间:2017-01-15 03:12:19

标签: angularjs angular-ui-router

我正在尝试实现一个组件控制器,它使用ui-router config中定义的当前状态。

我正在使用角度1.6.1和ui-router 0.3.2。

我在调试中观察到的是,在控制器中,状态基本上是一个无人居住的对象。它有字段但没有值。

但是如果我将它绑定到范围并在UI中呈现,它在UI中具有正确的值,因此我只能假设在执行控制器后的某些时间将值绑定到当前状态。

是否存在某种类型的状态初始化,即使需要在控制器中填充current state对象?

控制器代码执行时的

$state.current定义:

{"name":"","url":"^","views":null,"abstract":true}

来自app bootstrap:

var userStates = [
{
  name: 'signin',
  url: '/signin',
  templateUrl: 'views/signin.html',
  data: {
    title: 'Signin',
    crumb: [
      {title: 'app.home', uiState: 'home'},
      {title: 'users.signin'}
    ]
  }
}
];

userStates.forEach(function(state){
  $stateProvider.state(state);
});

然后在组件定义文件中:

var app = angular.module('ocs.admin.ui');

var ctrl = ['$state', '$scope', 'lodash', function($state, $scope, lodash) {

  $scope.uiState = $state;

  var crumb = lodash.get($state, 'current.data.crumb');
  if (state){
    $scope.crumb = crumb;
  }

}];

目前HTML文件非常简单:

<div class="page-breadcrumb">
    <div class="container">
        <ul class="breadcrumb">
            <li>
                <a href="index.html">Home</a>
                <i class="fa fa-circle"></i>
            </li>
            <li>
                <span>Dashboard</span>
            </li>
        </ul>
    </div>
</div>
<pre>
    {{uiState.current | json}}
</pre>

是否有我应该收听的事件或等待绑定对象的事情?

1 个答案:

答案 0 :(得分:1)

你可以试试这个,

$scope.$on('$stateChangeSuccess', function (event, toState, toParams, fromState, fromParams) {
  $scope.uiState = $state;
});