2

讓我們假設一個網頁位於/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排在大多數情況下,我...

有什麼好的做法?也許另一個解決方案

回答

1

這是一種欺騙,但是如何使用模態(http://ionicframework.com/docs/api/service/ $ ionicModal /)來渲染細節?

+0

我想到了這一點,但細節本身包含的按鈕,打開一些需要的模態..這將是沒有非常UX重疊模態..你覺得呢?此外,它將共享父$範圍醜陋 – Mik378 2014-09-23 10:48:35

+0

是的 - 同意。理論上你可以改變模態視圖而不是彈出更多的模態? – 2014-09-23 10:49:22

+0

如果我改變模態視圖,控制器模態不會很... SRP(單一責任原則)。具體來說,顯示頁面有一個右上角的按鈕,打開聊天模式。如果我將聊天邏輯與顯示邏輯混合在一起,那將是一團糟。左上角的按鈕是作爲後退按鈕的「箭頭」。 – Mik378 2014-09-23 10:50:48