我想改变用户在访问我的网站时看到的页面。如果他们是匿名的,他们应该看到注册页面。如果他们已经登录,他们应该看到他们的仪表板。
我有一个服务,检查用户是否登录(例如检查cookie),当Angular服务加载时触发。我尝试使用$ routeProvider重定向,但是当$ routeProvider正在初始化时,服务尚未触发,因此始终认为用户未登录。
确保在答案下阅读评论。当我回答这个问题时,我没有想过单元测试和设计。我只是表明,可以通过多种方式来实现预期的结果
原文链接:https://www.f2er.com/angularjs/144540.html我认为在控制器或你的app.config.run下做最好的方法。
在您的情况下,您应该创建另一个模块来检查用户登录状态。将用户登录状态检查模块注入您的应用程序模块。
http://plnkr.co/edit/dCdCEgLjLeGf82o1MttS
var login = angular.module('myLoginCheck',[]) .factory('$logincheck',function () { return function (userid) { // Perform logical user logging. Check either // by looking at cookies or make a call to server. if (userid > 0) return true; return false; }; }); var app = angular.module('myApp',['myLoginCheck']); app.config(function ($routeProvider,$locationProvider) { $routeProvider .when('/publicurl',{}) .when('/loginurl',{}) .when('/unauthorize',{}) .otherwise({redirectTo: '/'}); }) .run(function ($logincheck,$location) { //console.log("Into run mode"); console.log("Userid 5 is logged in: ",$logincheck(5)); console.log("Userid 0 logged in: ",$logincheck(0)); //now redirect to appropriate path based on login status if ($logincheck(0)) { //$location.path('/loginurl'); or } else { //$location.path('/publicurl'); or } }); app.controller('MainCtrl',function ($scope) { $scope.name = 'World'; });