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' 
    }); 

}); 
+0

您正在向您的状态传递一个参数,但是在您的url中未指定一个参数。 – levi 2015-03-02 16:03:28

+0

我没有url,只是状态名称 – ps0604 2015-03-02 16:10:05

既然你没有真正改变状态(即,你每一次击球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

+0

我试图避免重载:true – ps0604 2015-03-02 16:07:54

+1

所以,你的当前状态实际上并没有监听任何参数(但你传递了它的参数),如果它* *听取参数,它会自动'reloadOnSearch' – Tom 2015-03-02 16:10:31

+0

我也失踪{reload:true}它节省了我的生活,谢谢你 – 2015-08-19 09:54:26

PARAMS关键字缺失,需要在使用参数时在$ stateProvider中声明:

$stateProvider 
    .state('state1', { 
     templateUrl: 'state1.html', 
     params: { 'seq': null }, 
     controller: 'state1Ctrl' 
    });