わかりました、このアイデアはかなりおかしなことに思えるかもしれません。私はかなり標準的な Rails アプリ (いくつかのコンテンツ ページ、ブログ、ニュース ブロック、いくつかの認証) を持っています。そして、それをシングルページアプリにしたいです。
私が達成したいことは次のとおりです。
AJAX
を使用する場合と同様に、すべてのページがフェッチされますturbolinks
。ただし、AJAX はview part
(レイアウトの生成部分) のみを返し、レイアウト自体は同じままです (応答のデータが少なくなり、レンダリングと読み込み時間が短縮されます)。- ページはほとんどがマークアップ付きの静的な html で
AngularJS
あるため、処理する必要はありません。 - すべての実際のデータは、JSON を介して個別に読み込まれ、ビューに入力されます。
- また、それに応じて URL とページ タイトルが変更されます。
私はかなり長い間このコンセプトについて考えてきましたが、解決策が思い浮かびません。この時点で、これが実際にどのように行われるかについて、いくつかのアイデアを得ることができました。どんなアイデアや解決策も大歓迎です。または、私が気が狂って、ページをロードするための 3 つの小さな要求が、サーバー側ですべてのレンダリングを行う必要がある大きな要求よりも悪いのかもしれません。
だから、ここに私の考えと既知の問題があります。
- ユーザーが最初にアプリにアクセスすると、Angular マークアップを含むビュー テンプレートが定期的にレンダリングされ、2 番目の要求は
Angular Resource
. - 次に、そのアドレスがコンテンツ ラッパーの ngInclude に送信されるリンクの ngClick で。
- その onClick を任意のリンクにバインドするにはどうすればよいですか? また、そのバインドから特定のリンク (外部認証サービスへのリンクなど) を除外するにはどうすればよいですか?
- リクエストが Angular からのものである場合、レイアウトをレンダリングしないようにサーバーに指示するにはどうすればよいですか? リクエストにパラメーターを追加することについて考えましたが、より良いアイデアがあるかもしれません。
- ngInclude が要求されたテンプレートを取得すると、そのテンプレートのコントローラー (通常は 1 つ) の ngInit 関数を起動し、サーバーからデータを JSON として (適切なページ タイトルと共に) 取得します。
- Angular は受け取ったデータをテンプレートに入力し、ブラウザの URL をリンクの URL に設定し、ページのタイトルを取得したばかりのものに設定します。
- ページのタイトルとページの URL を変更するにはどうすればよいですか? タイトルはjQueryで変更できますが、Angular自体を経由する方法はありますか?
- 繰り返しになりますが、私はこの変更をよりファンシーにするために何らかのアニメーションを考え続けています。
- 利益!
そう。皆さんはどう思いますか?