讓我們假設一個網頁位於/items
,列出所有可用的項目。
當用戶點擊一個項目時,瀏覽器會顯示/items/:itemId
並顯示該項目的詳細信息。AngularJs /滾動無限和後退按鈕
當然,物品清單可能非常大。
這就是爲什麼我使用scroll infinite feature from Ionic(我使用基於Angular的框架)。然而,正如許多開發人員所知,處理從/items/:itemId
到/items
的「後退按鈕」是非常棘手的,因爲Angular的控制器在頁面轉換期間被破壞,然後在列表頁面再次加載時重新生成。
因此,在點擊物品的細節之前,丟失了滾動位置和已經加載的確切物品。
我想到了一些解決方案,但我猶豫了,因爲所有有「缺點」:
只是該項目之前存儲在
$cacheFactory
實際加載的項(完整的項目)(角的高速緩存或localStorage的)細節即將顯示。
因此,當按下後退按鈕時(在詳細信息頁面上),/items
的控制器可以從緩存中初始化數據,此外可以很容易地「記住」滾動位置。
缺點是高速緩存中的數據可能陳舊...「無需將任何加載的項存儲在緩存中!」只需在緩存或localStorage中存儲加載的實際塊數即可。例如,我的REST API允許通過10來檢索項目。
如果用戶被加載到第二塊(最多20個元素),緩存中的變量將包含該值,然後控制器可以是初始化所有20個項目。
缺點是它會涉及多個請求到服務器。事實上,如果用戶加載了30個塊,控制器需要對服務器進行30次調用...我可以自定義由服務器處理的塊的大小,但是一個項目很重(幾個長文本等等。 ),解釋了爲什麼我只限於一個相對較小的數字。使用雙向滾動(頂部和底部),以便DOM中始終有10個項目。我只需要存儲已加載的最後一個塊數,以便重新加載它。
缺點:我將不得不自己寫我的指令(可能是這樣),因爲目前沒有Angular(從Ionic)指令。
而且我認爲雙向處理僅當處理非常大的列表時纔有用:超過2000行,以便減輕DOM。
我不希望超過400排在大多數情況下,我...
有什麼好的做法?也許另一個解決方案
我想到了這一點,但細節本身包含的按鈕,打開一些需要的模態..這將是沒有非常UX重疊模態..你覺得呢?此外,它將共享父$範圍醜陋 – Mik378 2014-09-23 10:48:35
是的 - 同意。理論上你可以改變模態視圖而不是彈出更多的模態? – 2014-09-23 10:49:22
如果我改變模態視圖,控制器模態不會很... SRP(單一責任原則)。具體來說,顯示頁面有一個右上角的按鈕,打開聊天模式。如果我將聊天邏輯與顯示邏輯混合在一起,那將是一團糟。左上角的按鈕是作爲後退按鈕的「箭頭」。 – Mik378 2014-09-23 10:50:48