我有一个名为newGroupCtrl的控制器,其定义如下:
.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;
};
}
我从上一页到达此控制器:
$window.location.href = ('#/new_group');
直到现在,这是件好事。 $rootScope.roomId
变量在newGroupCtrl控制器中正确初始化。
从这个new_group页面,我导航到另一个页面。当我通过调用$window.location.href = ('#/new_group');
导航回此页面时,
$rootScope.roomId
未再次初始化,而是旧值仍然存在。 newGroupCtrl的状态被保留。
如何完全重新初始化newGroupCtrl?
答案 0 :(得分:5)
每次通过浏览器访问网址时,您需要告诉state
重新加载控制器只需添加reload
状态选项true
,如reload: true
。< / p>
<强>代码强>
.state('new_group', {
url: '/new_group',
templateUrl: 'templates/new_group.html',
controller: 'newGroupCtrl',
reload: true //will reload controller when state is being access
});
您应该使用$state.go('new_group')
而不是$window.location.href = ('#/new_group');
,这将确保路由更改将由ui-router
识别。
答案 1 :(得分:2)
由于您使用的是Ionic Framework(Good Job),您可以这样做:
.controller('YourCtrl', function($ionicView){
$ionicView.enter(function(){
//code that you want to run, each time the view is active
});
});
答案 2 :(得分:0)
从以下位置删除控制器:
.state('new_group', {
url: '/new_group',
templateUrl: 'templates/new_group.html',
})
将控制器添加到&#34; new_group.html&#34;带有页面父标记的页面,如:
<div ng-controller="newGroupCtrl"></div>
答案 3 :(得分:0)
我也发现有用(对于Ionic Framework)使用
.state('new_group', {
url: '/new_group',
templateUrl: 'templates/new_group.html',
cache: false
})
参考类似的问题和问题: Reloading current state - refresh data或在Reinitialize Controller every time when visiting View - Ionic Framework
中回答sjm