Javascript 第一次加载时$routeChangeSuccess上的Angularjs$出错

Javascript 第一次加载时$routeChangeSuccess上的Angularjs$出错,javascript,angularjs,Javascript,Angularjs,在过去的几天里,我在互联网上搜索,试图找出如何解决这个问题。我不确定我是不是用词不对,或者这是一个我似乎看不到的简单解决方案 我的问题是,在我的$routeProvider中,我在每个路由中添加了一个名为“access”的属性,以确定用户是否必须登录才能使用设置为true或false的名为“isFree”的变量查看页面 例如: $routeProvider .when('/', { controller: 'homeController', templateUrl: 'partials/

在过去的几天里,我在互联网上搜索,试图找出如何解决这个问题。我不确定我是不是用词不对,或者这是一个我似乎看不到的简单解决方案

我的问题是,在我的$routeProvider中,我在每个路由中添加了一个名为“access”的属性,以确定用户是否必须登录才能使用设置为true或false的名为“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属性,但我还没有解决我的问题。如果有人知道我能做些什么来解决这个小问题,我们将不胜感激。

听起来您的curRoute.access没有定义,所以请尝试将此作为您的If语句:

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

你有$routeProvider.Others定义吗?是的,但它也给了我“isFree”未定义错误。现在问题解决了。Mather Berg的解决方案奏效了。您是否在其他定义中添加了“access:{isFree:true}”?我的猜测是,否则的定义首先被命中,$routeChangeStart中的代码会检查缺少的access.isFree。我还原并测试了您的建议是否有效,但即使在我将“access:{isFree:true}”添加到之后。否则,我仍然会出错。谢谢!我知道这会很简单,但老实说,我的大脑无法与我合作。