2016-09-23 9 views
5

Próbowałem zrobić filtr w sterowniku kątowym, który rozróżnia wielkość liter podczas filtrowania tablicy.

Moje dane jest jak poniżej:

var stoneArr = 
[ 
    { 
     "stone_name": "Diamond", 
     "id": 16 
    }, 
    { 
     "stone_name": "Ruby", 
     "id": 17 
    }, 
    { 
     "stone_name": "Sapphire", 
     "id": 18 
    }, 
    { 
     "stone_name": "Emerald", 
     "id": 19 
    } 
]; 

Moje wejście HTML jest jak poniżej:

<input type="text" name="stone_name" class="form-control" id="stone_name" 
ng-model="propertyName" maxlength="15" required> 

Mój filtr w regulatorze jest:

var stoneObj = $filter('filter')(stoneArr, {stone_name:$scope.propertyName}, true); 

Oto pułapka jest to, że kiedy Wprowadzam "diament" w polu wejściowym

$scope.propertyName = "diamond"; 

Filtr nie pasuje do tego ciągu przy pomocy "Diamentu".

Nie chcę, aby usunąć dokładnie warunek match (true) z równania jak pokazano poniżej:

var stoneObj = $filter('filter')(stoneArr, {stone_name:$scope.propertyName}); //This won't work for me 

To nie będzie działać dla mnie, ponieważ chcę, aby dopasować dokładnie ciąg do filtrowania dane. Dane będą miały unikalne wartości "stone_name". Również nie chcę używać żadnych pętli, ponieważ długość tablicy przekroczy 1000+. Czy mimo to mogę to osiągnąć?

+0

Wewnętrznie filtr $ robi pętlę. Zrobiłbym jedną funkcję z tym porównywaniem lub stworzyć inny określony filtr –

Odpowiedz

3

Spróbuj użyć funkcji dopasowania, aby wielkość liter ma znaczenie meczu:

var stoneObj = $filter('filter')(stoneArr, function (item) { 
    return item.stone_name.toLowerCase() == $scope.propertyName.toLowerCase(); 
},true); 
Powiązane problemy