2014-02-18 64 views
2

我已經搜索了過去幾天的互聯網,試圖找出如何解決這個問題。我不確定我是否只是沒有正確的問題,或者這是一個簡單的解決方案,我看不到。

我的問題是,在我的$ 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('/'); 
    } 
}); 

我遇到的問題不在於此代碼無法正常工作。問題是,當你第一次加載到主頁(這是自由被設置爲true)時,控制檯給出'isFree'未定義的錯誤。首頁本身仍然加載並且該網站在第一次錯誤之後正常工作。但是,我不想讓這個錯誤首先出現。據我可以看出,當我第一次直接鏈接到主頁時,它試圖在isFree屬性被加載前檢查,但我還沒有解決我的問題。如果有人知道我能做些什麼來解決這個小問題,將不勝感激。

+0

你有$ routeProvider.otherwise定義? – tasseKATT

+0

是的,但它也給了我'isFree'未定義的錯誤。這個問題現在已經解決了。馬瑟伯格的解決方案工作。 – Jacob

+0

您是否在其他定義中添加了「access:{isFree:true}」?我的猜測是,否則defintion首先被擊中,並且您的$ routeChangeStart中的代碼檢查缺少的access.isFree。 – tasseKATT

回答

1

聽起來好像是沒有定義的curRoute.access,所以嘗試這是您的if語句來代替:

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

謝謝!我知道這會很簡單,但說實話我已經達到了我的大腦不與我合作的地步。 – Jacob