web-dev-qa-db-ja.com

ui-routerを使用してParamsで以前の状態を取得する方法

問題文 :

「コメントを追加」ボタンがあります。システムにログインしたときにのみコメントを追加できるはずです。

しかし、問題は、ログイン後に「コメントの追加」ページに戻れないことです。これは、前の状態がわからないか、前の状態を取得できないためです。

これに対するよりクリーンな解決策はありますか?ログインページを新しいページではなくモーダルにする必要がありますか?

私は以前の状態について取っているすべての質問と可能な答えを見てきました(はい、私は$ rootscopeと$ stateChangeSuccessについて取っています)。しかし、それは明確に解決策を提示していません。

他の可能な解決策は以下のとおりです http://christopherthielen.github.io/ui-router-extras/example/previous/index.html#

https://github.com/angular-ui/ui-router/issues/92 も見ました。しかし、繰り返しますが、私は正しい答えが何であるかわかりませんでした。

誰かが良い解決策を明確に述べることができますか?ルートスコープを使用するのは良いですか?

ログインページを新しいページではなくモーダルにする必要がありますか?これは設計上の決定です。あなたはあなたのアプリに合ったものをあなたの好みに合わせて持つことができます。

rootscopeを使用するのは良いですか?私はそれがかなり良い解決策だと感じています。これが私がそれをする方法です:

以前の状態を手動で保存します:

状態変更リスナーを作成します。

_    $rootScope.$on('$stateChangeSuccess', function(event, to, toParams, from, fromParams) {
        //save the previous state in a rootScope variable so that it's accessible from everywhere
        $rootScope.previousState = from;
    });
  }]);
_

Ui-srefを使用する代わりに、コメントボタンにクリック機能を配置します。

_$scope.commentHandler = function(){
    //check if user is logged in, let the user post the comment

    //else take him to login page
}
_

次に、ユーザーがログインした後に$state.go($rootScope.previousState.name)を使用して、コメントページに戻ることができます。

-または-

ユーザーがログインしていない場合は、[コメントを投稿]ボタンの代わりに小さなログインボックスを提供できます。

13
Frozen Crayon

Ui-router v1.0.0 +の場合、状態変更イベントは 非推奨 になっています。

Arjun's 状態変更リスナーの更新バージョンは

$transitions.onStart({}, function (transition) {
    $rootScope.previousState = transition.from();
});
3
Andrew Rogers