这是我的代码:
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都赞同这种理解
所以当我尝试console.log($ state.current)时,结果会有所不同。它告诉我,父状态是当前状态。
答案 0 :(得分:2)
onEnter
和onExit
个回调。在转换完全完成之前,$state.current
不会更新。转换完成后,$state.current
设置为&#34;到&#34; state,$ stateChangeSuccess被调用,并且调用控制器。
因此,$state.current
包含&#34;来自&#34; onEnter
和onExit
期间的州。