重定向狀態這是狀態配置:在angularjs
angular
.module('grabhutApp', [...])
.config(function ($stateProvider, $urlRouterProvider) {
$stateProvider
// ACCOUNT
.state('account', {
abstract: true,
url: '/account',
templateUrl: 'index.html'
})
.state('account.main', {
url: '',
templateUrl: 'views/account/account.login.html',
controller: 'AccountController'
})
.
.
.
// NO VIEWS
.state('nv', {
abstract: true,
url: '/nv'
})
.state('nv.logout', {
url: '/logout'
})
});
的nv
及其子狀態將沒有任何物理視圖或控制器。
我希望它們作爲調用某些功能的鏈接。
服務調用註銷方法:
angular.module('grabhutApp')
.factory('$grabhutAccountService', function ($state, $grabhutDataService) {
var methods = {
.
.
logoutUser: function() {
$grabhutDataService.user.removeSession();
$state.go('account.main', {}, {location: 'replace'});
}
.
.
};
return methods;
});
然後一個按鈕/鏈接註銷:
<a ui-sref="nv.logout" class="button icon icon ion-log-out button-large" menu-close></a>
我希望發生的是,當狀態nv.logout
被觸發時,
$grabhutAccountService.logoutUser()
必須被調用並且必須重定向到'account.main'
以下是我迄今所做的:
我試着在nv.logout
.state('nv.logout', {
url: '/logout',
resolve: {
logout: function ($grabhutAccountService) {
$grabhutAccountService.logoutUser();
}
}
})
該服務被稱爲,但國家並沒有重定向到使用的決心。所以我嘗試了另一種方式。我添加了一個控制器:
.state('nv.logout', {
url: '/logout',
resolve: {
logout: function ($grabhutAccountService) {
$grabhutAccountService.logoutUser();
}
},
controller: function ($scope, $state) {
$scope.$on('$stateChangeSuccess', function() {
$state.go('account.main');
});
}
})
但是$stateChangeSuccess
沒有被解僱。
於是,我就用rootScope:
.run(function(...., $grabhutAccountService){
.
.
.
$rootScope.logout = function(){
$grabhutAccountService.logoutUser();
};
.
.
.
})
而使用它像這樣:
<a ng-click="$root.logout()" class="button icon icon ion-log-out button-large" menu-close></a>
這工作得很好。但是我很擔心,因爲(AFAIK)rootScope會加載更多的數據,這可能會導致操作速度變慢。
此外,無論何時我需要某種類似上面的函數,我都必須再次在rootScope中附加函數。
我認爲這不是一個好方法。順便說一句,我正在建設這個電話,這就是爲什麼內存使用如此重要。