我有一組項目,我想過濾在ng重複使用ng模型作爲字符串過濾集,到目前爲止我還沒有找到一種方法,使其工作時,表達式被否定,我在做這樣的事情:Angularjs過濾器否定
在documentation,它說,我們應該使用!否定表達,但仍然沒有運氣。
我在做什麼錯?
我有一組項目,我想過濾在ng重複使用ng模型作爲字符串過濾集,到目前爲止我還沒有找到一種方法,使其工作時,表達式被否定,我在做這樣的事情:Angularjs過濾器否定
在documentation,它說,我們應該使用!否定表達,但仍然沒有運氣。
我在做什麼錯?
'!'字符,預先準備的過濾字符串,象下面這樣:
過濾器: '!' + languageOrigin
<select ng-model="languageOrigin" ng-change="updatePrice()">
<option ng-repeat="language in languages">{{language}}</option>
</select>
<select ng-model="languageDestination" ng-change="updatePrice()">
<option ng-repeat="language in languages | filter:'!'+languageOrigin">{{language}}</option>
</select>
UPDATE:查看ENDOH takanao的回答。
看着AngularJS source code,看起來'!'否定謂語的結果,而不是謂語本身:
var search = function(obj, text){
if (text.charAt(0) === '!') {
return !search(obj, text.substr(1));
}
switch (typeof obj) {
...
因此,要解決這一種方法是 [如果你不喜歡+ myFilter語法,「!」]你可以在你的控制器定義自己的謂詞函數:
$scope.inverseOriginFilter = function(item) {
return item.search($scope.languageOrigin) == -1
}
然後在你的HTML中使用它:
<select ng-model="languageDestination" ng-change="updatePrice()"
ng-options="language for language in languages | filter:inverseOriginFilter">
</select>
例fiddle。
這確實有效,但我想知道它是否不應該直接由AngularJS實現... – lgomezma
這工作正常,如果您的模型爲每個選擇下拉是目的地本身,但如果它已附加到其他東西呢? – iamwhitebox
如果使用對象,你可能也有興趣在以下幾點:
<li data-ng-repeat="obj in objs | filter:({obj_attr: '!obj_val'})">
...
</li>
在AngularJS 1.1.5中測試。
它工作時obj_attr包含字符串值,但我應該如何指定不空或不''(空)的字符串? –
這個例子爲我做了,但要注意,如果你想基於字符串不是空的過濾,它會看起來很糟糕,但仍然有效:'filter:{prop:'!'}'where'!'翻譯爲「不空」醜,但它的作品:) –
如果您使用的方法過濾的方法名稱前加'!'不管用。相反,你可以這樣做:
// You can register this in your AppCtrl if you like, otherwise just use $scope.
$rootScope.not = function(func) {
return function (item) {
return !func(item);
}
};
然後你做:
filter:not(myFilterMethod)
在HTML它看起來像:
<select ng-model="languageDestination" ng-change="updatePrice()">
<option ng-repeat="language in languages | filter:not(languageOrigin)">{{language}}</option>
</select>
我m使用1.3.15和ENDOH's解決方案無法正常工作。相反,filter:'!':languageOrigin
爲我工作。
如果您的過濾器是一種方法(不是字符串或模型)解決方案發布在這裏:http://stackoverflow.com/questions/13464809/reverse-polarity-of-an-angular-js-filter/17811582#17811582 –