AngularJS重新初始化控制器

Ozg*_*gen 5 routing angularjs 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;
    };
}
Run Code Online (Sandbox Code Playgroud)

我从上一页到达这个控制器:

$window.location.href = ('#/new_group');
Run Code Online (Sandbox Code Playgroud)

直到现在这都很好.$rootScope.roomId变量在newGroupCtrl控制器中正确初始化.

从这个new_group页面,我导航到另一个页面.当我通过调用导航回这个页面时 $window.location.href = ('#/new_group');, $rootScope.roomId没有再次初始化,而是它的旧值仍然存在.newGroupCtrl的状态被保留.

如何完全重新初始化newGroupCtrl?

Pan*_*kar 5

你需要告诉state每一次重新加载控制器URL时通过浏览器只需添加将得到访问reload状态的选项true喜欢reload: true.

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

你应该使用$state.go('new_group')而不是做$window.location.href = ('#/new_group');,这将确保路由更改将识别ui-router.

同样的回答在这里