Это состояние конфигурации:Перенаправление состояние в 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
и его подпункты государства не будет иметь никаких физических взглядов или контроллеров.
Я хочу, чтобы они служили связями, вызывающими определенные функции.
Service для вызова методов ВЫХОД ИЗ СИСТЕМЫ:
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.
И я думаю, что это не очень хороший подход. Кстати, я строю это в телефонной защелке, поэтому использование памяти так важно.