2015-03-02 3 views
4

In this plunk У меня есть ui-router $state.goto, который работает только в первый раз, хотя я увеличиваю переменную seq, чтобы принудительно перезагрузить. Убедитесь, что метка времени не изменяется. Что случилось с этим кодом?AngularJS router - не работает во второй раз

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

Вы передаете параметр в свое состояние, но в своем ur не укажете его. – levi

+0

У меня нет URL-адреса, просто имя состояния – ps0604

ответ

4

Так как вы на самом деле не меняется состояние (то есть, вы удара state1 каждый раз, как раз с другой параметр), вам необходимо передать третий параметр параметров с помощью {reload: true}

$state.go('state1', params, {reload: true}); 

Ваш plnkr, обновленный

Смотрите documentation для $state.go(to, params, options)

Edit (чтобы сделать этот ответ исправить на основе комментариев, которые мы имеем ниже)

Вы не включая params в фактическом состоянии, поэтому он не слушает их, поэтому, когда вы отправляете их, он автоматически не запускает reload. Ваше состояние должно быть:

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

Здесь $stateProvider автоматически устанавливает reloadOnSearch = true, вы могли бы сделать противоположное тому, что вы просите, используя третий параметр в вашем штате, reloadOnSearch: false

+0

Я пытаюсь избежать перезагрузки: true – ps0604

+1

Итак, ваше текущее состояние фактически не прослушивает какие-либо параметры (но вы передаете его параметры), если это * сделал * прослушивание параметров, это автоматически 'reloadOnSearch' – Tom

+0

Мне тоже не хватало {reload: true}, это экономит мое живое спасибо –

0

В PARAMS ключевое слово отсутствует, должно быть объявлено в $ stateProvider при использовании параметров:

$stateProvider 
    .state('state1', { 
     templateUrl: 'state1.html', 
     params: { 'seq': null }, 
     controller: 'state1Ctrl' 
    }); 
Смежные вопросы