在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',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被触发时 这是我到目前为止所做的: .state('nv.logout',{ url: '/logout',resolve: { logout: function ($grabhutAccountService) { $grabhutAccountService.logoutUser(); } } }) 该服务被调用但状态没有重定向.所以我尝试了另一种方式.我添加了一个控制器: .state('nv.logout',resolve: { logout: function ($grabhutAccountService) { $grabhutAccountService.logoutUser(); } },controller: function ($scope,$state) { $scope.$on('$stateChangeSuccess',function () { $state.go('account.main'); }); } }) 但$stateChangeSuccess没有被解雇. .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会加载更多可能导致运行速度变慢的数据.
哦,你真是太近了.我重新安排了你的一些代码并得出了这个:
app.run(function($rootScope,$grabhutAccountService) { $rootScope.$on('$stateChangeSuccess',function (evt,toState) { if (toState.name === 'nv.logout') { $grabhutAccountService.logoutUser(); $state.go('account.main'); } }); }); UI-Router的下一个主要版本将有很多改进的钩子来做这种事情. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |