2015-03-02 125 views
4

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

回答

4

既然你沒有真正改變狀態(即,你每一次擊球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

0

PARAMS關鍵字缺失,需要在使用參數時在$ stateProvider中聲明:

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