私はng-repeatでフィルタリングしたい項目のセットをフィルタリングする文字列としてng-modelを使用していますが、これまでのところ、否定されて、私はこのような何かをやっている:Angularjsフィルタが無効にされました
をdocumentationでは、それは我々が使用することを言います!表現を否定するが運がまだない。
私は間違っていますか?
私はng-repeatでフィルタリングしたい項目のセットをフィルタリングする文字列としてng-modelを使用していますが、これまでのところ、否定されて、私はこのような何かをやっている: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>
更新:ENDOHのtakanaoの答えを参照してください。
AngularJS source codeを見ると、「!」と表示されます。 [「!」あなたは+ myFilterを構文が気に入らない場合は、]あなたはできる
var search = function(obj, text){
if (text.charAt(0) === '!') {
return !search(obj, text.substr(1));
}
switch (typeof obj) {
...
ありませんお使いのコントローラで独自の述語関数を定義します。ので、これを回避する一つの方法は、にある:述部の結果を否定し、述語自体
$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: '!'}'どこに '!醜いですが、それは動作します:) –
メソッド名の先頭に '!'を付けてフィルタリングする方法を使用している場合は、動作しないでしょう。代わりに、あなたが何かを行うことができます。
// You can register this in your AppCtrl if you like, otherwise just use $scope.
$rootScope.not = function(func) {
return function (item) {
return !func(item);
}
};
を次にあなたが実行します。
<select ng-model="languageDestination" ng-change="updatePrice()">
<option ng-repeat="language in languages | filter:not(languageOrigin)">{{language}}</option>
</select>
私は」あなたのHTML内
filter:not(myFilterMethod)
それは次のようになります。 1.3.15とENDOH'sを使用していますが解決しませんでした。代わりに、filter:'!':languageOrigin
が私のために働いた。
フィルタがメソッド(文字列またはモデルではありません)の場合、ソリューションはここに掲載されています:http://stackoverflow.com/questions/13464809/reverse-polarity-of-an-angular-js-filter/17811582#17811582 –