質問: やりたいこととしては、Web APIから取得したデータをリスト表示するだけの画面なのですが、リストから詳細画面へ遷移して何か操作してからリスト表示の画面に戻る際に、詳細画面の内容を反映したいということになります。 無限スクロールしているので、リロードはしたくないです。 angularだとservice?とかにリストのデータをすべて保持しておき、リストにはその内容を表示。詳細画面での画面操作はserviceを更新。みたいな感じだとやろうと思えばやりたいことはできるとは思うのですが、詳細画面の操作でリストにデータを追加する場合などを考えると、仮にリストにソート条件とかがあるとかなり複雑になる気がします。。 みなさんどのような実装をされているのでしょうか?アドバイスいただきたいです。
回答: AngularJSを使用しています。 あくまで個人的な意見となりますが、このような場合、リストの表示は逐一更新することを前提に考えます。 そのために、リストに表示する件数はある程度絞ります。(リストへの表示は30~300件に限定することが多い) その上で、詳細画面からリスト画面に戻ったときには逐一リストデータの再取得をかけています。 最もシンプルで開発効率も良く、処理速度も気になりません。 こういった方式にしているのは以下の理由によります。 1.データバインディングが多量になると速度面でデメリットがある(その件を考えたくもない) 2.私がSPAを開発する主なプラットフォームが現状スマートフォンである(画面が小さいため、リスト表示が多くなることによるデメリットがある) 3.多量なデータを表示すべきであるということ(要件)自体に対して見直しをかける契機とする(本来はもっと絞ったデータが表示したいのではないか。大体の場合、要件定義者からできるなら階層化したり絞ったりしたいという回答が返ってきます。) 4.どうしても多量なデータが必要な場合、読み込み対象のデータはある程度で切り捨てて読み込む仕様とし(例えば対象データをキーで並び替えて上から300件を取得)、必要に応じて画面表示対象のデータを絞る機能を提供する やろうと思えば確かにAngularJSのserviceを上手く利用してやれなくもなさそうですが、上記3.の「要件自体に対して見直しをかける」というのが結構重要で、そもそも多量なデータリストを目にして何かをするということ自体を見直してあげると喜ばれることが多いです。 更に開発もシンプルになりますので保守性や拡張性も高く、良いことづくめです。 ご参考となれば。