Ich versuche zu verhindern, dass der Benutzer direkt zu Lesezeichen-URL gehen, wenn nicht angemeldet (vielleicht sollte ich herausfinden, wie nur eine URL anzuzeigen, egal was Zustand ?). Wenn der Benutzer angemeldet ist, wird $scope.serverToken
festgelegt.AngularJS UI-Router Rätsel - kann nicht zum Login-Bildschirm wechseln
Wenn nicht, möchte ich Zustand index.login
ändern - ABER der Login-Dialog nicht angezeigt wird - vielleicht wegen der ersten Prüfung in der Funktion ??
Was mache ich falsch?
$rootScope.$on('$stateChangeStart',
function(event, toState, toParams, fromState, fromParams)
{
if (toState == fromState)
return;
if (fromState.name == "")
{
$scope.serverToken = "";
event.preventDefault();
$scope.SetLoginDialog('login');
$state.go("index.login");
return;
}
// Take the user to the login page if server token expired only if user is not already transitioning to the
// login page
if (($scope.serverToken == "") && (toState.name !== 'index.login'))
{
console.warn('Attempt to go directly to URL without logging in');
event.preventDefault();
$scope.SetLoginDialog('login');
$state.go("index.login");
return;
}
var url = HOST + 'api/is_user_logged_in.php?token=' + $scope.serverToken;
console.log('Check if user is logged in at ' + url);
$http.get(url)
.success(function(data, status, headers, config)
{
Zustandsänderungen sind ein Menü über die Einträge wie diese auch ich Ihnen helfen könnte helfen ...
$stateProvider
.state('index', {
abstract: true,
url: "/index",
templateUrl: "views/common/content.html",
})
.state('index.login', {
url: "/login",
templateUrl: "views/login.html",
data: { pageTitle: 'Login' }
})
.state('index.overview', {
url: "/overview",
templateUrl: "views/overview.html",
data: { pageTitle: 'Overview' }
})
.state('index.events', {
url: "/events",
templateUrl: "views/events.html",
data: { pageTitle: 'Events' },
})
Hier einige meiner Controller Diese
<li ui-sref-active="active">
<a ui-sref="index.events"><i class="fa fa-desktop"></i> <div class="nav-label">Events</div></a>
</li>
sehen ist, in Fall es hilft ...
angular
.module('MyApp')
.controller('MainCtrl', MainCtrl)
function MainCtrl($rootScope, $scope, $http, $interval, $state, $location)
{
Ich nehme an, Sie haben einen Controller für mehrere Zustände? kannst du es zeigen? Es ist möglich, dass Sie den Controller bei jedem Zustandswechsel initialisieren und somit den Dialog "zerstören". – AranS
Ja, ich habe einen Mega Controller für mehrere Zustände, 2k + Leitungen und weit zu groß zum Posten :-(Welcher Teil würde "Initialisierung des Controllers" anzeigen in jedem Zustand ändern "? Ich benutze ein Framework, das Menü-Schaltflächen hat & behandelt Zustandsänderung, so dass es unwahrscheinlich ist, falsch zu sein. – Mawg
können Sie Ihren Routing-Code anzeigen? die State-Deklaration? vielleicht können wir eine Lösung finden, indem Sie die Spezifischer Status (wenn der Controller diesen Dialog anzeigt) – AranS