1
我過濾的對象使用NG重複AngularJS列表:使用感嘆號與AngularJS第一個字符過濾
<tr ng-repeat="application in page.applications | filter: {DisplayName:page.ApplicationSearchValue}">
{{application.DisplayName}}
</tr>
如果用戶將一個感嘆號作爲在搜索框中輸入的第一個字符,那麼Angular將它解釋爲否定符號。所以!MyApplication
返回除MyAppliction之外的所有應用程序。
我嘗試使用自定義函數作爲the Angular documentation for filter中的說明,但感嘆號從未找到進入該函數的方法。
我發現代碼通過下面的函數會在AngularJS source code,這基本上是強制感嘆號得到特殊待遇:
function deepCompare(actual, expected, comparator, matchAgainstAnyProp, dontMatchWholeObject) {
var actualType = getTypeForFilter(actual);
var expectedType = getTypeForFilter(expected);
if ((expectedType === 'string') && (expected.charAt(0) === '!')) {
return !deepCompare(actual, expected.substring(1), comparator, matchAgainstAnyProp);
.....
我目前的「解決方案」是過濾器對象更改爲:
filter: {DisplayName:(page.ApplicationSearchValue.indexOf('!') == 0 ? page.ApplicationSearchValue.substring(1) : page.ApplicationSearchValue)}
但直到QA計算出,如果有人用!!
開始搜索框將仍然出現問題,這只是一個時間問題。
處理這種情況是否有共同的模式?
向我們展示如何使用自定義函數進行嘗試。 –
'ctrl.filterFunc = function(actual,expected){ expected = expected.indexOf('!')== 0? expected.substring(1):預期; return actual.toLowerCase()。indexOf(expected)!= -1; }' 但是預期的價值從未包含感嘆號。 – HaveSpacesuit
不要通過比較器。傳遞一個函數作爲過濾器的唯一參數。如果該元素應該被過濾器接受,則使該函數返回true;否則返回false。 –