0

ルート$routeProviderに追加するa を定義しました。access

$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 からの put と get の間で何らかの理由でオブジェクトが変更されることです。

次の前に$cookieStore.put

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

$cookieStore.getそして、値 を使用してオブジェクトを取得すると、

params: Object
pathParams: Object
__proto__: Object

$$route オブジェクトなしでオブジェクトを取得しています。

それはなぜですか、どうすれば修正できますか?

4

1 に答える 1

1

これは、値が Angular によって Cookie ストアに入れられる前に「JSON 化」されるために発生します。
また、Angular のtoJson()メソッドは、で始まるプロパティをすべて無視します$JSON.stringify()(Angularの ではなく)を使用toJson()して、すでに「JSON化された」値を渡すか、プロパティの名前$$routeroute(またはで始まらないものに$)変更できます。


残念ながら、値は「JSON 化」されているため、すべての種類のプロパティを保存することはできません。
たとえば、関数や JSON 化できないオブジェクト (ウィンドウ、スコープ、ノードなど) は保持されません。

この短いデモも参照してください。


オブジェクト全体が実際に必要かどうかは疑わしい$$routeので、関心のあるプロパティ (path、pathParams など) だけを保存することをお勧めします。

于 2014-05-22T08:03:16.757 に答える