Richtig, ich habe etwas ziemlich Einfaches getan. Siehe hierzu plnkr für weitere Details.
userHttpService
würde normalerweise $http
wickeln, aber da ich keinen Endpunkt habe, um tatsächlich zu schlagen, fälsche ich ein Versprechen unter Verwendung der $q
Bibliothek.
routeConfig
ist ein Provider, den Sie zur Konfigurationszeit einrichten können, um mit Routen zu konfigurieren, zu denen Sie gehen dürfen. Wenn Sie etwas wie ui router verwenden, können Sie etwas eleganter mit einem settings
Objekt auf dem Routen-Setup tun. Wenn Sie etwas viel eleganter und fortschrittlicher sehen möchten, schauen Sie sich diese repo.
Die Config geht wie so:
app.config(function($routeProvider, $locationProvider, routeConfigProvider) {
$routeProvider.when('/home', { template: '<h2>Home</h2><p>Please do something</p>' })
$routeProvider.when('/login', { controller: 'LoginController', template: '<h2>Login</h2><div><p><span>Name:</span><input type="text" ng-model="name" /></p><p><span>Password:</span><input type="password" ng-model="password" /></p></div><div><p><button type="submit" ng-click="login()">Login</button></p></div><div><p>{{error}}</p></div>' });
$routeProvider.when('/profile', { controller: 'ProfileController', template: '<h2>Profile</h2><div><p><span>Name:</span>{{name}}</p></div>' });
$routeProvider.otherwise('/home');
$locationProvider.html5Mode(true);
routeConfigProvider.addRouteWhenLoggedIn('/profile');
routeConfigProvider.addRouteWhenLoggedIn('/home');
routeConfigProvider.addRouteWhenLoggedOut('/home');
routeConfigProvider.addRouteWhenLoggedOut('/login');
});
ich alle meine Vorlagen nur gebündelt in es für meine eigene einfache Bedienung. Ich ziehe meine routeConfigProvider
(beachten Sie, dass Sie Provider
nicht hinzufügen, wenn Sie es nennen .provider('routeConfig', ...
, Winkel tut dies für Sie).
Dann gehe ich Routen zu den verschiedenen Tabellen hinzufügen, eine Tabelle sind für Routen, die Sie navigieren können, wenn Sie angemeldet sind, und die andere, für Routen können Sie zu navigieren, wenn Sie angemeldet sind aus.
Unten ist, wo Sie tatsächlich auf der Navigation der Route handeln.
app.run(function ($rootScope, routeConfig, userService) {
$rootScope.$on('$routeChangeStart', function (e, c, p) {
var topath = c.$$route.originalPath;
if (userService.isLoggedIn()) {
if (!routeConfig.isAllowedWhenLoggedIn(topath)){
e.preventDefault();
// you can use $location.path to redirect if you wish
}
} else {
if (!routeConfig.isAllowedWhenLoggedOut(topath)){
e.preventDefault();
// you can use $location.path to redirect if you wish
}
}
});
});
Es ist ziemlich einfach ist, verwendet er die userService
(denken Sie daran, es ist nicht die userHttpService
so dass diese die Verantwortung für dishing benutzerspezifische Dinge hat) und fragt, ob der Benutzer angemeldet ist. Dann wird es entweder nachschlagen Routentabelle, um zu sehen, ob sie zur Route navigieren dürfen.
Die e.PreventDefault()
ist, wie Sie die Navigation verhindern.
Als erstes, um Ihren Code zu verbessern, werden Sie das Zeichen in der Logik zu seiner eigenen Fabrik abstrahieren wollen. –
@CallumLinington wie? Kannst du mir ein Beispiel geben? – loveyourserlf
arbeiten daran, geben Sie mir eine min –