2013-10-31 12 views
0

角度中的過濾器在tutorial example中正常工作,但假設我們想要使用日期過濾器而不是片段添加發布日期。所以代碼如下所示:在角度上對DOM值進行過濾

<ul class="phones"> 
    <li ng-repeat="phone in phones | filter:query"> 
     {{phone.name}} 
     <p>{{phone.releaseDate | date:'medium'}}</p> 
    </li> 
    </ul> 

有什麼方法可以根據DOM值而不是電話對象上的基礎數據進行過濾嗎?過濾後的releaseDate比用戶搜索實際數據要容易得多。

+0

創建您自己的過濾器的目標,你要的值。 http://docs.angularjs.org/guide/dev_guide.templates.filters.creating_filters –

+0

您必須創建自己的過濾器:http://docs.angularjs.org/guide/dev_guide.templates.filters.creating_filters –

回答

1

過濾器是與特定的命名約定和格式的服務。

在角服務負責數據&狀態(及以上,但很少用於DOM操作)

所以只在模型數據篩選工作。當然你可以創建自己的過濾器來操縱DOM(角度指令的責任),但這不是角度的方式。

所以要解決你的問題,你需要操縱的不是dom,而是你的模型數據。

我已經創建了我會怎麼做這個plunker:

http://plnkr.co/edit/uol9GQjUsEIN42JzLIC9?p=preview

+0

我認爲使用過濾器的重點在於格式化數據。現在我們將過濾器的責任推到模型中。這是角度的方式?我認爲過濾器用於指令或視圖 - 至少指南中的所有文檔似乎都指向僅在視圖/指令中使用過濾器。 – user140550

+0

您也可以在服務中使用過濾器。就像我說過濾器是服務。我在服務中使用日期過濾器來格式化日期。我可以編寫自己的服務來格式化日期。相反,我使用角度日期過濾器並使用它。問題在於搜索過濾器的實施。它只是比較你提供的數據。所以我認爲最簡單的方法就是改變這些數據。實現你自己的查詢過濾器需要做更多的工作。 – bekite

+0

我喜歡這個方法,它完美的工作。我讀過的有關過濾器的所有內容都是在視圖中使用的,我想確認在控制器或服務中使用它們仍然被視爲有效的方法。謝謝貝基特。 – user140550

0

thx很多Chandermani爲我提供了一件新事物,並指出了一個致命的錯誤。

對你而言,答案是否定的。 (在第二次閱讀之後,我現在明白了你的問題)

angular只能對自己的數據「工作」,並且在計算完所有數據之後,它會呈現它並創建DOM,因此儘管您始終可以創建一個過濾器的指令來查詢DOM並將該數據設置爲角度obj,這將是一個非常錯誤的解決方法。

記住,採用了棱角分明的全點使用MVC模式...

+4

date是一個角度過濾器。 – Chandermani

+0

我的服務器返回的日期爲自1970年以來的毫秒數。我應該告訴我的用戶,角度的方法是搜索毫秒數?多麼敵對的方式來對待我的客戶。 – user140550

+0

我不明白你的評論user140550,這是另一個Q? – bresleveloper