2017-04-12 3 views
0

어떤 이유로이 옵션은 아무것도 필터링하지 않습니다.각도 필터 : {v : 0}은 (는) 필터링하지 않습니다. 다른 값은 올바르게 작동합니다.

$scope.oarray = [{ name:"(select)", v:0 },{ name:"name1", v:100 },{ name:"name2", v:200 }]; 

선택 상자 목록의 모든 요소 : "(select)", "name1""name2" 필터가 만 "(select)"를 반환 말한다하더라도

<select 
    ng-model="s.id" 
    ng-options="c.v as c.name for c in oarray | filter:{v:0}" 
> 
</select> 

이 구조는 다음과 같습니다

는 선택이다 회원이 v==0 인 유일한 사람입니다.

필터를 v:100으로 변경하면 올바르게 필터링됩니다.

왜?! 이것이 '기능'또는 '부작용'이라면 이미 미리 정의 된 값을 변경하지 않고 해결 방법이 무엇입니까?

미리 감사드립니다.

PS : 여기 당신의 놀이터입니다 : http://plnkr.co/edit/huRPv08A4bucJmcG60Fe?p=preview

답변

1

귀하의 필터가 V 값이0를 포함하는 모든 객체를 검색하지가 0 동일 곳.

당신은

ng-options="c.v as c.name for c in oarray | filter:{v:0}:true" 

여기에 두 번째 매개 변수는 비교기, false에 선택적 매개 변수의 기본값입니다 예를 들어, 엄격한 비교를 수행하도록 지시하는 필터에 :true를 보내야합니다. 상기 예상 값에 기초하여 매치 (에서 고려되어야 값 (이 함수가 아닐 때) 식을 이용하여 검색하는 경우 결정하는데 사용된다

비교기 다음 Angular documentation for filter이 파라미터에 대한 다음과 같은 정보를 포함 필터 식) 및 실제 값 (배열의 개체에서).

function(actual, expected) :

은 다음 중 하나 일 수 있습니다 기능은 비교 대상 값과 조건 값을 부여하고 두 값이 동일한 것으로 간주 할 필요가있는 경우에 true를 반환해야합니다.

: function(actual, expected) { return angular.equals(actual, expected)}의 약어. 이것은 본질적으로 예상과 실제의 비교가 엄격한 입니다.

false : 대소 문자를 구분하지 않고 부분 문자열을 찾을 함수에 대한 짧은 지침입니다. 프리미티브 값은 문자열로 변환됩니다. 사용자가 toString 메소드 (예 : Date 객체)를 지정하지 않는 한 객체는 프리미티브와 비교되지 않습니다.

기본값은 false입니다.

+0

어, 오! 정말 고맙습니다! – Grzegorz