AngularJS路由器 - 第二次不工作
问题描述:
In this plunk我有一个ui路由器$state.goto
,只有第一次工作,即使我增加seq
变量强制重新加载。看到时间戳不会改变。这段代码有什么问题?AngularJS路由器 - 第二次不工作
HTML
<body ng-controller="MyCtrl">
<button ng-click="goto()">Go to state</button>
<div ui-view=""></div>
</body>
国家HTML
<div>
{{time1}}
</div>
的Javascript
var app = angular.module("app", ['ui.router']);
app.controller('MyCtrl', function($scope,$state) {
var seq = 0;
$scope.goto = function(){
alert('about to go to state - ' + seq) ;
var params = {
seq: seq++
};
$state.go ('state1', params);
};
});
app.controller('state1Ctrl', function($scope) {
$scope.time1 = new Date();
});
app.config(function($stateProvider) {
$stateProvider
.state('state1', {
templateUrl: 'state1.html',
controller: 'state1Ctrl'
});
});
答
既然你没有真正改变状态(即,你每一次击球state1
,只是一个不同的参数),你必须通过第三个选项参数{reload: true}
$state.go('state1', params, {reload: true});
你plnkr,更新
见documentation为$state.go(to, params, options)
编辑(以基于评论这个答案正确,我们有如下)
你不包括params
处于实际状态,所以它不会监听它们,因此当您发送它们时,它不会自动触发reload
。你的状态应该是:
$stateProvider
.state('state1', {
templateUrl: 'state1.html',
controller: 'state1ctrl',
params: {
seq: {}
}
});
这里,$stateProvider
自动设置reloadOnSearch = true
,你可以做你在你的国家使用第三参数问什么的对面,reloadOnSearch: false
答
的PARAMS关键字缺失,需要在使用参数时在$ stateProvider中声明:
$stateProvider
.state('state1', {
templateUrl: 'state1.html',
params: { 'seq': null },
controller: 'state1Ctrl'
});
您正在向您的状态传递一个参数,但是在您的url中未指定一个参数。 – levi 2015-03-02 16:03:28
我没有url,只是状态名称 – ps0604 2015-03-02 16:10:05