0

最初に条件を指定すると、私の条件が機能しないのはなぜですか?AngularJS。 ng-repeatのフィルターの複数の条件

  1. は、私がpricetoが100を置く=>私はすべての項目を、取得する場所価格> 100
  2. 私は名前=>何で「アプリケーション」に変更置く しかし、私はアイテムを取得する必要があり(価格> 100) AND(名前には「App」が含まれています)。

フィドル:http://jsfiddle.net/QHtD8/142/

JS:

var myApp = angular.module('myApp', []); 

function MyCtrl($scope) { 
    $scope.products = [ 
     {name:"Apple",type:"fruit",price:100}, 
     {name:"Grape",type:"fruit",price:500}, 
     {name:"Orage",type:"fruit",price:555}, 
     {name:"Carrot",type:"vegetable",price:1000}, 
     {name:"Milk",type:"dairy",price:800} 
    ]; 

    $scope.productFilter = function (item) {1 
     var result = item.name === $scope.foodName || 
          item.price >= $scope.priceFrom || 
        item.price <= $scope.priceTo; 
      return result; 
     }; 

} 

はHTML:

<div ng-controller="MyCtrl"> 
    Name 
    <input ng-model="foodName" /><br> 
    Price from 
    <input ng-model="priceFrom" /><br> 
    Price to 
    <input ng-model="priceTo" /><br> 
    <ul> 
     <li ng-repeat="item in products | filter:productFilter"> 
      {{item.name}} - {{item.price}} 
     </li> 
    </ul> 
</div> 

Example

+0

のですか?フィドルはうまく動作するようです。 – k102

+0

サンプルイメージのようです。価格を100にすると、すべてのアイテム(価格> 100)を取得した後、名前に「App」を入れて何も変更しません。しかし、Name> "App"が含まれているprice> 100 ANDの項目を取得する必要があります。 –

答えて

2

あなたの濾過機能で間違った条件を持っています。

は、以下のことを試してみてください。ここで

$scope.productFilter = function (item) { 
     var result = (!$scope.foodName || item.name.toLowerCase().includes($scope.foodName.toLowerCase())) && 
        (!$scope.priceFrom || item.price >= $scope.priceFrom) && 
        (!$scope.priceTo || item.price <= $scope.priceTo); 

     return result; 
    }; 

は、エラーが何であるかをjsfiddle

+0

私はIF $ scope.something EXISTSを参照して、条件を使用します。 ? –

+0

'1'は既に問題にありますが、何もしません(ASIのために' if(x){1; y();} 'になりますので削除できます)。 – Caramiriel

+0

@ValSaven - あなたが入力に何かを入れると、それだけがこの条件を使用します。 – MaKCbIMKo