第一次加载时$ routeChangeSuccess上的Angularjs $

时间:2014-02-18 17:06:05

标签: javascript angularjs

过去几天我一直在搜索互联网,试图弄清楚如何解决这个问题。我不确定我是不是没有正确处理这个问题,或者这是一个我似乎无法看到的简单解决方案。

我的问题是,在我的$ 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属性,但我还没有解决我的问题。如果有人知道如何解决这个小问题,我们将不胜感激。

1 个答案:

答案 0 :(得分:1)

听起来你的curRoute.access没有定义,所以试试这个作为你的if语句:

if ((!curRoute.access || !curRoute.access.isFree) && !loggedIn) {
    $location.path('/');
}