Verwenden von $ state-Methoden mit $ stateChangeStart toState und fromState in Angular ui-router

Ich schreibe einen Handler für$stateChangeStart:

var stateChangeStartHandler = function(e, toState, toParams, fromState, fromParams) {
    if (toState.includes('internal') && !$cookies.MySession) {
        e.preventDefault();
        // Some login stuff.
    }
};

$rootScope.$on('$stateChangeStart', stateChangeStartHandler);

toState verfügt nicht über die Methode includes. Sollte ich etwas anderes machen, oder gibt es eine Möglichkeit, das zu tun, was ich versuche?

Auch wenn // einige Anmeldedateien ein$state.go(...)Ich bekomme eine Endlosschleife. Was könnte das verursachen?

Hier ist ein vollständigeres Beispiel, das zeigt, was wir letztendlich zur Arbeit gebracht haben:

angular.module('test', ['ui.router', 'ngCookies'])
.config(['$stateProvider', '$cookiesProvider', function($stateProvider, $cookiesProvider) {

    $stateProvider
    .state('public', {
        abstract: true
    })
    .state('public.login', {
        url: '/login'
    })
    .state('tool', {
        abstract: true
    })
    .state('tool.suggestions', {
        url: '/suggestions'
    });

}])
.run(['$state', '$cookies', '$rootScope', function($state, $cookies, $rootScope) {
    $rootScope.$on('$stateChangeStart', function(e, toState, toParams, fromState, fromParams) {

        if (toState.name.indexOf('tool') > -1 && !$cookies.Session) {
            // If logged out and transitioning to a logged in page:
            e.preventDefault();
            $state.go('public.login');
        } else if (toState.name.indexOf('public') > -1 && $cookies.Session) {
            // If logged in and transitioning to a logged out page:
            e.preventDefault();
            $state.go('tool.suggestions');
        };
    });
});

Ich benutze nicht gerneindexOf nach einem bestimmten Bundesstaat in der Schweiz suchentoState. Es fühlt sich naiv an. Ich bin mir nicht sicher warumtoState undfromState konnte keine Instanz der sein$state Service, oder warum die$state Der Dienst konnte keine Statuskonfigurationsüberschreibung in seinen Methoden akzeptieren.

Die Endlosschleife wurde durch einen Fehler von unserer Seite verursacht. Ich mag das nicht, deshalb suche ich immer noch nach besseren Antworten.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage