私は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
});
}
});
この時点で、他に何か必要なコードがあれば教えてください。私は、状態の変化がブラウザの履歴に格納される方法にいくつかの問題があると思います。それが起こる可能性がある場合は、私のコードのどの部分が原因であるかを把握できるように、どうすればいいか教えてください。
は、いくつかのコードを提供する必要が助けることができるので。おそらくあなたのui-routerの設定 – Austin
@Austinはいくつかを追加しました。他に何かが必要な場合は教えてください。 – Rajan
これはAngularの既知の課題です。解決策はかなり醜いです。状態パラメータを渡していますが、問題を解決するのをさらに難しくしていますが、私はまだ良い修正を見つける必要があります。 –