속성을 기준으로 개체 각도 필터링
다음과 같은 유사한 구조(서비스로부터 데이터가 반환되는 방식)에 있는 일련의 개체 속성을 가진 개체가 있습니다.
{
"1": {
"type": "foo",
"name": "blah"
},
"2": {
"type": "bar"
},
"3": {
"type": "foo"
},
"4": {
"type": "baz"
},
"5": {
"type": "test"
}
}
ng-repeat을 실행하면 다음과 같은5개의 오브젝트를 모두 반복할 수 있습니다.
<div ng-repeat="item in items">{{item.type}}</div>
다만, 정말로 하고 싶은 것은, 「foo」타입이 아닌 항목, 즉 5가 아닌 3의 반복에 대해서만 반복하고 싶다고 생각하고 있습니다.필터가 어떻게든 이용될 수 있다는 것은 알고 있습니다만, 그 방법에 대해서는 잘 모르겠습니다.다음을 시도했습니다.
<div ng-repeat="item in items| !filter:{type:'foo'}">{{item.type}}</div>
근데 이거 안 돼.실제로, 2개의 오브젝트(아이템이 있는 오브젝트)로 제한하기 위해서라도, 이하를 실시합니다.type==="foo")는 작동하지 않고 5회 반복합니다.
<div ng-repeat="item in items| filter:{type:'foo'}">{{item.type}}</div>
기본적으로 다음과 같은 작업을 수행하고자 합니다.
<div ng-repeat="item in items" ng-if="item.type !=='foo'>{{item.type}}</div>
하지만, 나는 그것이 효과가 없다는 것을 안다.
답변이 늦었지만 도움이 될 수 있습니다.
지정된 개체의 손자 또는 더 깊은 개체에 대해 필터링하려는 경우 개체 계층을 계속 구축할 수 있습니다.예를 들어 'thing.properties'를 필터링하는 경우.title'은 다음 작업을 수행할 수 있습니다.
<div ng-repeat="thing in things | filter: { properties: { title: title_filter } }">
필터 개체에 추가하는 것만으로 개체의 여러 속성을 필터링할 수도 있습니다.
<div ng-repeat="thing in things | filter: { properties: { title: title_filter, id: id_filter } }">
'not equals' 구문이 조금 다릅니다. 다음을 시도해 보십시오.
<div ng-repeat="thing in things | filter: { properties: { title: '!' + title_filter } }">
필터는 어레이에서 작동하지만 개체 리터럴이 있습니다.
따라서 개체 리터럴을 배열로 변환하거나 개체 리터럴을 사용하는 것보다 고유한 필터를 만들 수 있습니다.
이러한 인덱스 값이 필요하지 않은 경우 어레이로 변환하는 것이 가장 좋은 방법입니다(이 어레이는 다음과 같이 동작합니다.http://jsfiddle.net/NqA8d/3/) :
$scope.items = [{
"type": "foo",
"name": "blah"
}, {
"type": "bar"
}, {
"type": "foo"
}, {
"type": "baz"
}, {
"type": "test"
}];
필터를 사용하는 경우는, 다음의 1개의 방법이 있습니다.
myApp.filter('myFilter', function () {
return function (items, search) {
var result = [];
angular.forEach(items, function (value, key) {
angular.forEach(value, function (value2, key2) {
if (value2 === search) {
result.push(value2);
}
})
});
return result;
}
});
그리고 그 바이올린: http://jsfiddle.net/NqA8d/5/
여기서 오브젝트를 변환하는 것이 가장 좋은 방법이라는 것에 동의하지만, 다음 필터 기능도 사용할 수 있습니다.
angular.module('app').filter('objectByKeyValFilter', function () {
return function (input, filterKey, filterVal) {
var filteredInput ={};
angular.forEach(input, function(value, key){
if(value[filterKey] && value[filterKey] !== filterVal){
filteredInput[key]= value;
}
});
return filteredInput;
}});
다음과 같습니다.
<div ng-repeat="(key, value) in data | objectByKeyValFilter:'type':'foo'">{{key}}{{value.type}}</div>
'플런커'도 참조해 주세요.
(컨트롤러에서) 다음을 시도합니다.
$scope.notFooFilter = function(item)
{
return (item.type !== 'foo');
};
HTML 마크업:
<div ng-repeat="item in items| filter:notFooFilter">{{item.type}}</div>
개체를 필터링하려면 이 작업을 수행하십시오.
var rateSelected = $filter('filter')($scope.GradeList, function (obj) {
if(obj.GradeId == $scope.contractor_emp.save_modal_data.GradeId)
return obj;
});
그런 건 다 필요 없어.이 솔루션은 필터를 변환하거나 직접 작성할 필요 없이 정상적으로 작동합니다.
{{myModel.userSelectedHour["Start"]}}
따라서 오브젝트.object.module 대신 ["model"]를 선택합니다.
언급URL : https://stackoverflow.com/questions/19849806/angular-filter-a-object-by-its-properties
'programing' 카테고리의 다른 글
| HOC - 기능 컴포넌트 (0) | 2023.03.20 |
|---|---|
| 하나의 컨트롤러를 2개의 다른 뷰에 재사용하는 방법 (0) | 2023.03.20 |
| 플러그인 가져오기를 로드하지 못했습니다. 'eslint-plugin-import' (0) | 2023.03.20 |
| WordPress에서 jQuery로 아코디언을 작성하려면 어떻게 해야 합니까? (0) | 2023.03.20 |
| Observable/http/async 콜로부터의 응답을 angular로 반환하려면 어떻게 해야 합니까? (0) | 2023.03.20 |