gpt4 book ai didi

angularjs - angularjs中的重定向状态

转载 作者:行者123 更新时间:2023-12-04 07:00:37 26 4
gpt4 key购买 nike

这是状态配置:

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并且它的子状态将没有物理 View 或 Controller 。
我希望它们充当调用某些功能的链接。

注销方法调用服务:
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();
}
}
})

服务被调用,但状态没有重定向。所以我尝试了另一种方法。我添加了一个 Controller :
.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 中附加功能。
而且我认为这不是一个好方法。顺便说一句,我正在 phonegap 中构建它,这就是内存使用如此重要的原因。

最佳答案

哦,你是如此接近。我重新排列了您的一些代码并得出了以下结论:

app.run(function($rootScope, $grabhutAccountService) {
$rootScope.$on('$stateChangeSuccess', function (evt, toState) {
if (toState.name === 'nv.logout') {
$grabhutAccountService.logoutUser();
$state.go('account.main');
}
});
});

UI-Router 的下一个主要版本将有很多改进的钩子(Hook)来做这种事情。

关于angularjs - angularjs中的重定向状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26172749/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com