AngularJS重新初始化控制器

时间:2015-05-13 08:27:41

标签: angularjs routing angular-ui-router ionic-framework ionic

我有一个名为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?

4 个答案:

答案 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识别。

此处SO answer

答案 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