그리드 용 필터링 솔루션을 개발 중입니다. 필터에는 패널에 여러 확인란이 있습니다. 현재 ng-repeat 지시문에 내장 된 필터를 사용하는 작업 솔루션이 있습니다. 그러나 여러 매개 변수가있는 단일 필드를 필터링하는 방법을 찾지 못했습니다. 이것이 내가 가진 것입니다.
HTML :
<tr data-ng-repeat="rule in rules | orderBy:sortOrder | filter:filterOrder">
컨트롤러 :
var defaultFilter = {critical:'', score:'', category:'', pass:'false'};
$scope.filterOrder = defaultFilter;
내가 원하는 것은 다음과 같이 할 수 있다는 것입니다.
var defaultFilter = {critical:'', score:'', category:'', pass:'false && notRun'};
이것이 가능한지 잘 모르겠습니다. 구문을 찾았지만 아직 찾지 못했습니다. 컨트롤러에 넣는 방법이 있다는 것을 알고 있지만 현재 프로젝트로 인해이 구현이 훨씬 더 쉬울 것입니다.
1.0.x 브랜치를 사용한다고 가정하면, 객체 필터링을위한 소스 코드 의 관련 부분이 아래 각주에 나와 있습니다. 이것은 표준 필터가 테스트 할 키를 찾은 다음 var text = (''+expression[key]).toLowerCase();
을 호출하기 전에 검색 기준에서 가져옴을 보여줍니다 search
. search
그런 다음 ( indexOf(text) > -1
.
따라서 검색 조건의 항목 중 하나를 시도하는 방식으로 평가해야하는 식으로 설정할 수 없습니다.
유일한 다른 옵션은 다음과 같습니다.
$scope.myFilterTest(item) { return ... true or false test result ...; }
과:
<tr data-ng-repeat="rule in rules | orderBy:sortOrder | filter:myFilterTest">
var someApp=angular.module('myApp', []);
someApp.filter('complexFilter', function() {
return function(input, criteria) {
var result = [];
for (var i = 0; i < input.length; i++) {
if(... multiple tests ...){
result.push(input[i]);
}
}
return result;
}
});
그리고:
<tr data-ng-repeat="rule in rules | orderBy:sortOrder | complexFilter:filterOrder">
각주:
src / ng / filter / filter.js의 관련 부분
case "object":
for (var key in expression) {
if (key == '$') {
(function() {
var text = (''+expression[key]).toLowerCase();
if (!text) return;
predicates.push(function(value) {
return search(value, text);
});
})();
} else {
(function() {
var path = key;
var text = (''+expression[key]).toLowerCase();
if (!text) return;
predicates.push(function(value) {
return search(getter(value, path), text);
});
})();
}
}
break;
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다