Ich habe 4 Zustände: Armaturenbrett, dahboard.main, dashboard.minor, Login. Armaturenbrett ist abstrakt, und es ist ein Elternteil Zustand für .minor und .main Staaten. Unten ist mein Code:Angularjs UI-Router. Wie umleiten zur Login-Seite
.state('dashboard', {
url: "/dashboard",
abstract: true,
templateUrl: "views/dashboard.html",
resolve: {
auth: function ($q, authenticationSvc) {
var userInfo = authenticationSvc.getUserInfo();
if (userInfo) {
return $q.when(userInfo);
} else {
return $q.reject({ authenticated: false });
}
}
},
controller: "DashboardCtrl",
data: { pageTitle: 'Example view' }
})
.state('dashboard.main', {
url: "",
templateUrl: "views/main.html",
controller: "DashboardCtrl",
data: { pageTitle: 'Main view' }
})
Wie Sie im Armaturenbrett Zustand sehen habe ich resolve Option. Hiermit möchte ich den Benutzer zur Anmeldeseite umleiten, wenn er nicht autorisiert ist. Aus diesem Grund verwende ich spezielle authenticationSvc Service:
.factory("authenticationSvc", ["$http", "$q", "$window", function ($http, $q, $window) {
var userInfo;
function login(email, password) {
var deferred = $q.defer();
$http.post("/api/login", { email: email, password: password })
.then(function (result) {
if(result.data.error == 0) {
userInfo = {
accessToken: result.data.accessToken
};
$window.sessionStorage["userInfo"] = JSON.stringify(userInfo);
deferred.resolve(userInfo);
}
else {
deferred.reject(error);
}
}, function (error) {
deferred.reject(error);
});
return deferred.promise;
}
function getUserInfo() {
return userInfo;
}
return {
login: login,
logout: logout,
getUserInfo: getUserInfo
};
}]);
ich überprüfen Auth Wert in Config:
.run(function($rootScope, $location, $state) {
$rootScope.$state = $state;
$rootScope.$on("routeChangeSuccess", function(userInfo) {
consol.log(userInfo);
});
$rootScope.$on("routeChangeError", function(event, current, previous, eventObj) {
if(eventObj.authenticated === false) {
$state.go('login');
}
});
});
Aber leider, wenn ich auf meiner Website Wurzel oder dem Armaturenbrett Zustand gehen erhalte ich eine leere Seite. Was ist falsch an diesem Code? Vielen Dank!
Die Ereignisnamen sind eigentlich '$ routeChangeSuccess' und' $ routeChangeError' (man beachte den führenden '$') ... nicht so einfach wie das sein könnte? – Clive