In this plunk我有一个ui-router $state.goto
只能在第一次工作,即使我正在递增一个seq
变量来强制重新加载。看时间戳没有变化。这段代码有什么问题?
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'
});
});
答案 0 :(得分:4)
由于您实际上并未改变状态(即,您每次都要使用state1
,只需使用不同的参数),您必须使用{reload: true}
传递第三个选项参数
$state.go('state1', params, {reload: true});
您的plnkr,已更新
请参阅$state.go(to, params, options)
的{{3}}
修改(根据我们在下面发表的评论,使答案正确无误)
您没有将params
包含在实际状态中,因此它不会监听它们,因此当您发送它们时它不会自动触发reload
。你的州应该是:
$stateProvider
.state('state1', {
templateUrl: 'state1.html',
controller: 'state1ctrl',
params: {
seq: {}
}
});
此处,$stateProvider
会自动设置reloadOnSearch = true
,您可以使用州内的第三个参数reloadOnSearch: false
答案 1 :(得分:0)
缺少 params 关键字,需要在使用参数时在$ stateProvider中声明:
$stateProvider
.state('state1', {
templateUrl: 'state1.html',
params: { 'seq': null },
controller: 'state1Ctrl'
});