过去几天我一直在搜索互联网,试图弄清楚如何解决这个问题。我不确定我是不是没有正确处理这个问题,或者这是一个我似乎无法看到的简单解决方案。
我的问题是,在我的$ routeProvider中,我在每个路由中添加了一个名为“access”的属性,以确定用户是否必须使用名为“isFree”的变量来查看页面,该变量设置为是真还是假。
示例:
$routeProvider
.when('/', {
controller: 'homeController',
templateUrl: 'partials/home.html',
access: { isFree: true }
});
然后我在.run函数中有一段代码,用于监视路由更改并检查页面是否要求用户登录以及是否已登录。如果页面'isFree'设置为true然后它应该让页面加载,否则它会检查用户是否已登录,如果没有,它会重定向回主页。
.run(['$rootScope', '$location', function($root, $location) {
$root.$on('$routeChangeSuccess', function(scope, curRoute, prevRoute) {
if (!curRoute.access.isFree && !loggedIn) {
$location.path('/');
}
});
我遇到的问题不是这段代码不起作用。问题是,当您第一次加载到主页(isFree设置为true)时,控制台会给出错误,即“isFree”未定义。主页本身仍然加载,并在第一次错误后网站正常工作。但是,我不希望首先弹出该错误。据我所知,当我第一次直接链接到主页时,它尝试在加载之前检查isFree属性,但我还没有解决我的问题。如果有人知道如何解决这个小问题,我们将不胜感激。
答案 0 :(得分:1)
听起来你的curRoute.access没有定义,所以试试这个作为你的if语句:
if ((!curRoute.access || !curRoute.access.isFree) && !loggedIn) {
$location.path('/');
}