ui-select를 사용하여 각도로 작은 프로그램을 작성했습니다. 그리고 또는 검색을 다른 필드 (json의 중첩 필드가 될 수 있음)에서 수행하는 필터를 작성하려고합니다.중첩 된 json을 각도로 검색하기 위해 필터를 작성하는 방법은 무엇입니까?
$scope.contracts = [{
name: "contract1.00",
value: 10,
id :{
id : 8000,
code : 2
},
policy : {
info : {
name : "test1",
country : "test"
}
}
}
//other elements....
:이 필터를 적용 할
/**
* AngularJS default filter with the following expression:
* "person in people | filter: {name: $select.search, age: $select.search}"
* performs an AND between 'name: $select.search' and 'age: $select.search'.
* We want to perform an OR.
*/
app.filter('propsFilter', function() {
return function(items, props) {
var out = [];
if (angular.isArray(items)) {
var keys = Object.keys(props);
items.forEach(function(item) {
var itemMatches = false;
for (var i = 0; i < keys.length; i++) {
var prop = keys[i];
var text = props[prop].toLowerCase();
if (item[prop].toString().toLowerCase().indexOf(text) !== -1) {
itemMatches = true;
break;
}
}
if (itemMatches) {
out.push(item);
}
});
} else {
// Let the output be the input untouched
out = items;
}
return out;
};
});
내 JSON 객체가이 구조를 가지고 :의 GitHub의에서 나는 (그러나 단순한 필드) 비슷한 일을 할 수있는이 필터를 발견 UI-선택
이 'propsFilter'는 간단한 필드에서만 작동하는 것이 문제입니다. 내가 작성하는 경우 그래서,이 :
propsFilter: {name: $select.search, value : $select.search}
이 correcly 일을하고이 두 필드 (이름 또는 값)의 OR 검색을 할 것입니다. 그러나 나의 예에서는 id.id와 policy.info.name이라는 두 개의 다른 필드를 사용하여 OR 검색을 수행하려고합니다. 여기, 마지막으로
propsFilter: {name: $select.search, value : $select.search, id.id : $select.search, policy.info.name : $select.search }
내 plunker은 다음과 같습니다 :
그래서, 제가하고 싶은 것은이 같은 라인을 사용하는 것입니다 http://plnkr.co/edit/ej2r7XqeTPOC5d1NDXJn?p=preview
나도 같은 검색 필터에 어떻게 그렇게 할 수 있습니까 ??
좋은 일. 그러나이 질문의 범위는 너무 광범위하게 보인다. – Aravind
어, 네가하고 싶은 말을 이해할 수는 없지만 내 질문은 그다지 크지 않았다. 방금 id.id 및 policy.info.name과 같은 중첩 된 속성에이 필터를 적용 할 수있는 방법을 물었습니다. 재귀 필터와 같은 것을 사용할 수 있다는 것을 알았지 만 실제로 그것에 대해 확신하지는 못했습니다 ... – salamanka44