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.