0

Warum mein Zustand nicht funktioniert, wenn ich die erste von jeder Bedingung.AngularJS. Mehrere Bedingungen in Filter in ng-repeat

  1. Ich habe 100 in der priceto => ich alle Einzelteile erhalten, bei denen der Preis> 100
  2. Ich habe "App" im Name => nichts ändert Aber ich sollte Artikel bekommen, wo (Preis> 100) UND (Name enthält "App").

Geige: 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

was ist der Fehler? Geige scheint gut zu funktionieren – k102

+0

Wie im Beispielbild. Wenn ich 100 in den PriceTo setze, bekomme ich alle Artikel, wo der Preis> 100 ist, dann habe ich "App" in den Namen eingetragen und nichts verändert. Aber ich muss Sachen bekommen, wo Preis> 100 UND wo Name "App" enthält. –

Antwort

2

Sie haben eine falsche Bedingungen in Ihrer Filterfunktion.

Versuchen Sie Folgendes:

$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; 
    }; 

Hier ist jsfiddle

+0

Ich sehe ... IF $ scope.etwas EXISTS, dann verwenden wir die Bedingung. Richtig? –

+0

'1' ist bereits in der Frage vorhanden, es macht nichts (wegen ASI wird dies zu 'if (x) {1; y();}'), so dass es entfernt werden kann. – Caramiriel

+0

@ValSaven - richtig, wenn Sie etwas in die Eingänge setzen, nur dann wird es diese Bedingung verwenden, – MaKCbIMKo