5

私は現在、サイトの URL をナビゲートする際に、この「ログイン」状態のままユーザーをログインさせることができる meanjs スタック ボイラープレートに基づくセットアップを行っています。これは、グローバルに利用可能になる Service にユーザー オブジェクトを保持するためです。

ただし、これは、ベースルート、つまり「/」から、アプリ内でのみナビゲーションする場合にのみ機能します。

「/page1」などの URL を手動で入力すると、グローバル ユーザー オブジェクトが失われますが、ルート ホームページに移動してサイト経由で「/page1」に移動すると、グローバル ユーザー オブジェクトが失われます。それなら問題ありません。サービス オブジェクトにグローバル ユーザー オブジェクトが表示されます。

したがって、これはページ全体の更新が原因で発生すると思います。これにより、サイトを介してナビゲートしているグローバル値が失われ、更新が行われないため、すべての変数が保持されます。

注意すべき点:

  1. 「!」のプレフィックスを使用して、HTML5Mode を有効にしました。
  2. UIルーターを使っています
  3. 「/」を含むタグを使用します
  4. すべてのルートをロードした後、すべての '/*' を受け取り、ルートの index.html ファイルを返す最後のルートが 1 つあります。

私はちょうど人々がここで一般的に何をしているのか疑問に思っています? 標準の Cookie とローカル ストレージ ソリューションを元に戻しますか? 私はAngularにかなり慣れていないので、これにはライブラリがあると思います。

これに対処するための推奨される方法や大多数が何をしているのかを知りたいだけなので、正しい方法と角度のある方法で調整されていると思います。

アップデート:

アドレス バーから自分のサイトの別の URL に手動で移動すると、ユーザー状態が失われますが、アドレス バーから手動でルートに戻ると、ユーザー状態が再び表示されるため、単に状態が失われるわけではありません。ウィンドウのリフレッシュで。したがって、ルート URL で実行されているコードに関連しているようです。

手動で入力された URL (HTML5 ロケーション モードのため) は、AngularJs ファイルが含まれているため、最初に index.html を返し、次に UI-Route がそれを引き継いで適切にルーティングする必要があることを明示的に書き直しました。

したがって、ルート上のすべてのコードがとにかく実行されると予想していたので、サイトをナビゲートしたり、アドレスバーに入力したりするのと似ているはずです. この効果を持つAngularについて何かが欠けているに違いありません。

更新 2

正しいので、さらに調査すると、次のようになります。

<script type="text/javascript">
    var user = {{ user | json | safe }};
</script>

これは index.html のサーバー側コードです。手動 URL を介してページを新しいページに更新する場合、これは実行されないと思います。

ハッシュ バン モードを使用すると機能します。これは、ハッシュ バン モードを使用すると、ブラウザーに URL を入力しても更新されないためです。HTML5 モードを使用すると更新されます。したがって、今考えられる解決策は、sessionStorage を使用することです。

より良い代替案がない限り?

更新 3:

HTML5Mode を使用する場合にこれを処理する最良の方法は、エクスプレス サーバーで書き直し、他にいくつかのことを行うことです。

4

2 に答える 2

1

結局、私はかなりのトラブルに見舞われましたが、HTML5Mode を使用している人に適用されるいくつかのステップに分解できるいくつかのことを実行することで、何とか動作させることができました。

1) Angular で HTML5Mode を有効にした後、Angular src js ファイルを含む index.html を送り返すようにサーバーに書き換えを設定します。この書き換えは、静的ファイルと通常のサーバー ルートの後 (たとえば、REST API ルートの後) に行う必要があります。

2) Angular ルートがサーバー ルートと同じでないことを確認します。したがって、フロントエンドの状態が /user/account の場合、サーバー ルート /user/account がないと呼び出されないため、サーバー側のルートを /api/v1/server/route のようなものに変更します。

3) Angular の状態/ルートを経由せずにサーバーへの直接呼び出しをトリガーすることを意図した、フロントエンドのすべてのアンカー タグについては、必ず「target=_self」を追加してください。

于 2014-11-07T23:35:09.270 に答える