2014-05-22 25 views
0

後我定義了一個$routeProvider,增加了access的路線:屬性disapear獲取對象形成的CookieStore

$routeProvider.when('/tracks/:trackTitle/:mediaTitle', 
{ 
    templateUrl: 'views/track-detail.html', 
    controller: 'MediaCtrl', 
    access: access.user 
    ... 
} 

我正在聽$routeChangeStart變化事件,並檢查用戶可以訪問該頁面。如果沒有我保存的路徑中的CookieStore並在用戶登錄後加載它。

$rootScope.$on("$routeChangeStart", function (event, next, current) { 
    $rootScope.error = null; 
    if (!Auth.authorize(next.access)) { 
     if (!Auth.isLoggedIn()) 
     $cookieStore.put('current.user.originalPath', originalPath); 
     $location.path('/signup'); 
    }}); 

的問題是,next對象看跌期權之間的一些原因的變化,並從獲得的CookieStore。

$cookieStore.put之前接下來就是:

$$route: Object 
params: Object 
pathParams: Object 
__proto__: Object 

當我得到使用$cookieStore.get對象的值是

params: Object 
pathParams: Object 
__proto__: Object 

我得到的對象,而$$路由對象。

這是爲什麼,我該如何解決?

+0

你試過我的解決方案嗎?它有助於你解決問題嗎? – gkalpak

+0

你砰的一聲!對不起,遲到了。 – special0ne

回答

1

發生這種情況的原因是,在將Cookie放入Cookie存儲之前,Angular會將值「JSON化」。
而Angular的toJson()方法忽略以$開頭的任何屬性。 您可以使用JSON.stringify()(不是Angular的toJson())傳遞已經「JSON化」的值或將屬性$$route重命名爲route(或任何不以$開頭的內容)。


不幸的是,由於值是「JSON化」,所以不可能存儲所有種類的屬性。
例如函數或非JSONifiable對象(窗口,範圍,節點等)將不會被保留。

另外,請看short demo


我懷疑你其實需要整個$$route對象,所以我建議你剛剛保存的屬性,你有興趣(例如,通路,pathParams等)。