2014-07-23 53 views
2

我想知道如何延遲過濾功能,直到通過AJAX調用加載所有數據。AngularJS - 延遲過濾器直到加載AJAX調用

我試圖過濾數據,但我不能過濾其中的一些,因爲它們沒有加載,直到AJAX調用。有沒有辦法延遲過濾功能,或者在所有數據加載後禁用並啓用它?

更新

,數據結構設置的方式是,我做一個AJAX調用並加載不同的用戶做出的posts列表。之後,我打電話給另外兩個AJAX呼叫,以加載關於每個帖子的useraccount的信息。

當我爲posts + user info + account info設置過濾器時,我只能通過posts進行過濾。但是,我想通過useraccount信息進行篩選。

我想我可以解決這個問題,如果我禁用過濾器,直到所有數據加載。

+0

我要補充一些示例代碼,但我甚至不知道從哪裏開始。我只想知道是否有可能延遲或啓用/禁用過濾器,直到一切都加載。 – wag0325

+0

你能詳細解釋一下......如果數據沒有加載,你想過濾什麼? – harishr

+0

通過禁用過濾器,你想顯示所有的帖子,直到用戶/帳戶信息加載,或其他方式? – runTarm

回答

1

使用ng-model加上:語法將篩選器綁定到響應數據來執行此操作。例如:

<select ng-model="$root.listData" ng-include="'my_list' | filterTopTen:$root.listData" required></select> 

許多狀態的過濾器可以只通過暴露隱藏的狀態作爲模型,使之成爲用於濾波器的參數被轉換成無狀態過濾器。

單元測試表明,過濾器在下列情況下:

  • 除非輸入/參數改變

  • 應該重新評估過濾器與非原始輸入,做不應該調用過濾器當valueOf()值變化時支持valueOf()

  • 應該總是重新評估具有非原始i NPUT不支持valueOf()

  • 不應該重新評估與非原始輸入的是不支持valueOf()

  • 應始終重新評估過濾器與null原型創建的非原始輸入濾波器

由於過濾器在控制器之前運行,請確保更新模型的控制器與綁定到視圖的控制器分開以避免競爭狀況。

與記憶化

可以使用過濾器,以避免消化週期:

函數編程努力最小化由構建可重用機制到運行時的移動部件。Memoization是一種內置於編程語言中的功能,可以自動緩存循環函數返回值。

使用像memoization這樣的功能語言功能,我可以在功能級別添加緩存,實現比命令式更好的結果(幾乎不會改變我的代碼)。功能編程消除了運動部件,讓您專注於解決實際問題。

參考