2016-03-30 12 views
0

私はhtml5ルーティング(角度のhtml5モード)が有効になっている私のアプリで角度UIルータを使用しています。uiのルータとブラウザの履歴の問題

ほとんどの場合、ui-srefを使用して1つの状態から別の状態に移動しますが、正常に動作します。しかし、ブラウザの戻るボタンを使用するときに何も起こりません。注意してください、これはイベントの1つです。しかし、それがうまくいくと、私はブラウザコントロールで "進む"しようとすると、何も起こらず、私は同じ状態にとどまります。私の州には全てユニークなURLがあります。私はこの問題に悩まされており、進めることができません。任意のポインタが役立つだろう。

これは、私は自分のアプリケーションのベースパスを設定する方法です:

<base href="/" target="_blank"> 

これは私のルータの設定は次のようになります。

$stateProvider 
.state("base",{ 
    abstract: true, 
    url: "/app", 
    template: "<div ui-view></div>" 
}) 
.state("login", { 
    url: "/login", 
    parent: "base", 
    templateUrl: "somePath", 
    controller: "loginController" 
}) 
.state("auth",{ 
    abstract: true, 
    parent: "base" 
    resolve: { 
     user: function(StateService){ 
      return StateService.getCurrentUser(); 
     } 
    } 
}) 
.state("state1", { 
    url: "/state1", 
    parent: "auth", 
    templateUrl: "somePath", 
    controller: "state1Controller" 
}) 
.state("state2", { 
    url: "/state2", 
    parent: "auth", 
    templateUrl: "somePath", 
    controller: "state2Controller" 
}); 

私は基本的に私はいくつかのことを解決するいくつかの基本状態を持っており、サブ状態の残りの部分に基本パスを追加します。私は現在のユーザーを解決する別の抽象的な状態を持っています。それには多くの子状態があり、それぞれはログインしたユーザーだけがアクセスできます。

StateServiceには、バックエンドから現在のユーザーの詳細を取得する要求を行う機能getCurrentUserがあります。私のバックエンドは、現在のユーザの詳細を持つセッションを維持します。セッションにユーザーがいない場合は、401を返します。これには、ユーザーをログインページにリダイレクトします。そうでなければ、UIルータは残りの部分を処理します。今のところ、私はこのユーザーをクッキーに保存しないと仮定しましょう。したがって、ページが更新されると、要求はバックエンドに再び送られます。

私はいくつかのインターセプタも持っています。他のアプリケーションロジックの場合は、$stateChangeStartイベントを待ち受けます。たとえば、ユーザーが既にログインしていて、ログインページに移動しようとすると、私は状態の変更を停止し、ユーザーを何らかのデフォルト状態にリダイレクトします(state1と言うことができます)。これらは私のアプリの実行ブロックに登録されています。

$rootScope.$on("$stateChangeStart", function(event, toState, toParams, fromState) { 
    if(toState && toState.url =="/login"){ 
    StateService.getCurrentUser() 
    .then(function(user){ 
     $state.go("state1") 
    }) 
    .catch(function(){ 
     // no problem, go ahead 
    }); 
    } 
}); 

この時点で、他に何か必要なコードがあれば教えてください。私は、状態の変化がブラウザの履歴に格納される方法にいくつかの問題があると思います。それが起こる可能性がある場合は、私のコードのどの部分が原因であるかを把握できるように、どうすればいいか教えてください。

+0

は、いくつかのコードを提供する必要が助けることができるので。おそらくあなたのui-routerの設定 – Austin

+0

@Austinはいくつかを追加しました。他に何かが必要な場合は教えてください。 – Rajan

+0

これはAngularの既知の課題です。解決策はかなり醜いです。状態パラメータを渡していますが、問題を解決するのをさらに難しくしていますが、私はまだ良い修正を見つける必要があります。 –

答えて

0

あなたはすでにこれを試みた場合、私は確認することはできません任意のコードを提供されていませんが、多分THIS答えはあなた

+0

@ShinyDarkSone私はいくつかのコードを追加しました。必要があれば教えてください。また、私はあなたがリンクしている答えを調べましたが、私はそれがなぜ必要なのか分かりません。ブラウザのURLが正しい限り、ルータは正しい状態をロードする必要があります。右? – Rajan

+0

はい、それはすべきですが、何が起きているのかを知る必要があります。 '$ rootScope。$ on(" $ stateChangeStart "')にブレークポイントを設定し、toStateを調べると、最後の状態の値が必要ですifそうでないと、同じ値のfromStateをチェックします。おそらく、私たちが見ていないルーティング問題があります。 これを既に試してみたら、結果をコメントできますか? – ShinyDarkStone

関連する問題