Redirect Staat in angularjs

Dies ist der Zustand, Konfiguration:

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'
            })  
    });

Den nv und seine sub-Staaten haben keine physische views oder Controller.

Ich möchte Ihnen zu dienen, wie links, die Aufrufe bestimmter Funktionen.

Service für den Aufruf von logout-Methoden:

angular.module('grabhutApp')
    .factory('$grabhutAccountService', function ($state, $grabhutDataService) {

        var methods = {     
            .
            .
            logoutUser: function () {
                $grabhutDataService.user.removeSession();
                $state.go('account.main', {}, {location: 'replace'});
            }
            .
            .
        };

        return methods;
    });

Dann ein button/link zum Abmelden:

<a ui-sref="nv.logout" class="button icon icon ion-log-out button-large" menu-close></a>  

Was ich will, geschehen wird, dass, wenn die staatlichen nv.logout ausgelöst wurde

$grabhutAccountService.logoutUser() aufgerufen werden muss und umleiten müssen, um 'account.main'

Hier ist, was ich bisher getan habe:

Ich habe versucht, zu lösen nv.logout

.state('nv.logout', {
    url: '/logout',
    resolve: {
        logout: function ($grabhutAccountService) {
            $grabhutAccountService.logoutUser();
        }
    }
}) 

War der service genannt, aber der Staat hat nicht umleiten. Also versuchte ich einen anderen Weg. Ich habe eine controller:

.state('nv.logout', {
    url: '/logout',
    resolve: {
        logout: function ($grabhutAccountService) {
            $grabhutAccountService.logoutUser();
        }
    },
    controller: function ($scope, $state) {
        $scope.$on('$stateChangeSuccess', function () {
            $state.go('account.main');          
        });
    }   
})  

Aber $stateChangeSuccess ist nicht gefeuert zu werden.

Also ich habe versucht, die rootScope:

.run(function(...., $grabhutAccountService){

    .
    .
    .
    $rootScope.logout = function(){
        $grabhutAccountService.logoutUser();
    };
    .
    .
    .

})  

Und verwenden Sie es wie diese:

<a ng-click="$root.logout()" class="button icon icon ion-log-out button-large" menu-close></a>

Diese funktioniert einwandfrei. Aber ich mache mir sorgen, da (AFAIK) rootScope noch weitere Daten geladen, was dazu führen langsamer Vorgang.

Außerdem, Wann immer ich brauche eine Art Funktion wie oben, hätte ich anfügen Funktion in rootScope wieder.

Und ich denke, das ist kein guter Ansatz. BTW, ich Baue diese in phonegap, das ist der Grund, warum die Speichernutzung so wichtig ist.

InformationsquelleAutor fiberOptics | 2014-10-03
Schreibe einen Kommentar