2015-05-13 20 views
5

Mam kontrolera nazwie newGroupCtrl którego definicja jest jak:angularjs ponownie zainicjować kontroler

.state('new_group', { 
    url: '/new_group', 
    templateUrl: 'templates/new_group.html', 
    controller: 'newGroupCtrl' 
}) 

.controller('newGroupCtrl', function ($scope, $rootScope,$ionicHistory,$window) { 
    $rootScope.roomId = $scope.getRoom(); 

    $scope.getRoom = function() { 
     var date = new Date; 
     var minutes = date.getMinutes(); 
     var hour = date.getHours(); 
     return 'room_' + hour + '' + minutes; 
    }; 
} 

sięgam to contoller z poprzedniej strony poprzez:

$window.location.href = ('#/new_group'); 

to dobrze aż do teraz. $rootScope.roomId Zmienna jest poprawnie inicjowana w kontrolerze newGroupCtrl.

Z tej strony new_group, przechodzę do następnej strony. A kiedy wracam do tej strony, dzwoniąc pod numer $window.location.href = ('#/new_group');, , $rootScope.roomId, nie jest ona ponownie inicjowana, zamiast tego stara wartość nadal tam jest. Stan newGroupCtrl jest zachowany.

Jak mogę całkowicie reinicjować newGroupCtrl?

+0

Co robi funkcja getRoom()? czy możesz udostępnić swoje dane kodu? –

+0

Dodałem również kod getRoom, a także – Ozgen

+1

Ponieważ używasz interfejsu użytkownika, powinieneś poruszać się z usługą $ state. $ state.go ("new_group"); – Okazari

Odpowiedz

5

Trzeba powiedzieć state że przeładować sterownik za każdym razem, gdy adres URL jest uzyskiwany za pośrednictwem przeglądarki, wystarczy dodać opcję reload do stanu true, np. reload: true.

Kod

.state('new_group', { 
    url: '/new_group', 
    templateUrl: 'templates/new_group.html', 
    controller: 'newGroupCtrl', 
    reload: true //will reload controller when state is being access 
}); 

Należy użyć $state.go('new_group') zamiast robić $window.location.href = ('#/new_group'); który zapewni, że zmiany tras rozpozna przez ui-router.

samo SO answer tutaj

0

Wyjąć regulator od:

.state('new_group', { 
    url: '/new_group', 
    templateUrl: 'templates/new_group.html', 
}) 

i dodaj kontrolera na stronie „new_group.html” z macierzystej tagu strony, takich jak:

<div ng-controller="newGroupCtrl"></div> 
+1

to wygląda jak hacky rozwiązanie ..: p –

2

Ponieważ używasz Framework jonowe (Good Job), można to zrobić:

.controller('YourCtrl', function($ionicView){ 
    $ionicView.enter(function(){ 
    //code that you want to run, each time the view is active 
    }); 
});