AngularJS路由器 - 第二次不起作用

时间:2015-03-02 15:57:42

标签: angularjs angular-ui-router

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

});

2 个答案:

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