这是状态配置:
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被触发时
必须调用$grabhutAccountService.logoutUser()并且必须重定向到’account.main’
这是我到目前为止所做的:
我试着在nv.logout中使用resolve
.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没有被解雇.
所以我尝试使用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中附加功能.
而且我认为这不是一个好方法.顺便说一句,我在手机屏幕中构建这个,这就是内存使用如此重要的原因.