http://docs.angularjs.org/api/ng.filter:filter 에서 예제를 살펴보십시오.
을 사용하여 전화 속성으로 <input ng-model="search">
검색 할 수 있으며을 사용하여 이름으로 만 검색 할 수 <input ng-model="search.name">
있으며 결과는 이름별로 적절하게 필터링됩니다 (전화 번호를 입력해도 예상대로 결과가 반환되지 않음).
하자 내가, 내가 어떻게에 의해 필터링에 대해 갈 것 “이름”속성,에 “전화”속성, 그리고 “비밀”속성을 가진 모델이 있다고 모두 “전화”속성과 “이름”을 하지 은 “비밀”속성을 ? 따라서 본질적으로 사용자는 이름이나 전화 번호를 입력 할 수 ng-repeat
있으며은 올바르게 필터링되지만 사용자가 “비밀”값의 일부와 동일한 값을 입력하더라도 아무것도 반환하지 않습니다.
감사.
답변
여기 플런 커가 있습니다
더 깔끔한 코드와 쿼리 및 검색 목록 항목 모두 대소 문자를 구분하지 않는 새로운 플 런커
주요 아이디어는 이러한 목적을 달성하기 위해 필터 기능을 만드는 것입니다.
에서 공식 문서
function : 술어 함수를 사용하여 임의의 필터를 작성할 수 있습니다. 이 함수는 배열의 각 요소에 대해 호출됩니다. 최종 결과는 술어가 true를 리턴 한 요소의 배열입니다.
<input ng-model="query">
<tr ng-repeat="smartphone in smartphones | filter: search ">
$scope.search = function(item) {
if (!$scope.query || (item.brand.toLowerCase().indexOf($scope.query) != -1) || (item.model.toLowerCase().indexOf($scope.query.toLowerCase()) != -1) ){
return true;
}
return false;
};
최신 정보
어떤 사람들은 실제 성능에 대한 우려를 가질 수 있습니다.
현실 세계에서는 아마도 컨트롤러에서 이런 종류의 필터를 수행 할 것입니다.
수행 방법을 보여주는 세부 게시물 은 다음과 같습니다 .
간단히 말해, ng-change
새로운 검색 변경을 모니터링하기위한 입력에 추가 합니다.
그런 다음 필터 기능을 트리거합니다.
답변
API 참조에 설명 된대로 객체를 매개 변수로 필터 표현식에 전달할 수 있습니다 . 이 개체는 다음과 같이 관심있는 속성을 선택적으로 적용 할 수 있습니다.
<input ng-model="search.name">
<input ng-model="search.phone">
<input ng-model="search.secret">
<tr ng-repeat="user in users | filter:{name: search.name, phone: search.phone}">
여기 플런 커가 있습니다
주의 …이 예제는 AngularJS 1.1.5에서 잘 작동하지만 항상 1.0.7에서는 잘 작동하지 않습니다. 이 예제에서 1.0.7은 모든 것을 필터링하여 초기화 한 다음 입력 사용을 시작할 때 작동합니다. 공백으로 시작하더라도 입력에 일치하지 않는 값이있는 것처럼 동작합니다. 안정적인 릴리스를 유지하려면 상황에 맞게 시도해보십시오.하지만 일부 시나리오에서는 1.2.0이 릴리스 될 때까지 @maxisam의 솔루션을 사용할 수 있습니다.
답변
나는 @maxisam의 답변에서 영감을 얻어 내 자신의 정렬 기능을 만들었고 그것을 공유하고 싶지만 (심심해서).
상황은
나는 자동차의 배열을 필터합니다. 필터링 할 선택된 속성은 이름, 연도, 가격 및 km입니다. 부동산 가격과 km는 숫자입니다 (따라서 사용 .toString
). 또한 대문자를 제어하고 싶습니다 (따라서 .toLowerCase
). 또한 필터 쿼리를 다른 단어로 나눌 수 있기를 원합니다 (예 : 필터 2006 Acura가 주어지면 2006 년과 이름이 일치하는 Acura를 찾습니다).
필터에 전달하는 함수
var attrs = [car.name.toLowerCase(), car.year, car.price.toString(), car.km.toString()],
filters = $scope.tableOpts.filter.toLowerCase().split(' '),
isStringInArray = function (string, array){
for (var j=0;j<array.length;j++){
if (array[j].indexOf(string)!==-1){return true;}
}
return false;
};
for (var i=0;i<filters.length;i++){
if (!isStringInArray(filters[i], attrs)){return false;}
}
return true;
};
답변
타사 라이브러리를 사용할 수있는 경우 멋진 필터 모음이있는 ‘Angular Filters’가 유용 할 수 있습니다.
https://github.com/a8m/angular-filter#filterby
collection | filterBy: [prop, nested.prop, etc..]: search
답변
이 답변이 도움이되기를 바랍니다. 다중 값 필터
이 바이올린의 작업 예
arrayOfObjectswithKeys | filterMultiple:{key1:['value1','value2','value3',...etc],key2:'value4',key3:[value5,value6,...etc]}
답변
여기에는 좋은 해결책이 많이 있지만 이것으로 다른 길을가는 것이 좋습니다. 검색이 가장 중요하고 ‘비밀’속성이 뷰에서 전혀 사용되지 않는 경우; 이에 대한 나의 접근 방식은 모든 이점과 함께 내장 된 각도 필터를 사용하고 단순히 모델을 새로운 객체 배열에 매핑하는 것입니다.
질문의 예 :
$scope.people = members.map(function(member) {
return {
name: member.name,
phone: member.phone
}});
이제 html에서는 일반 필터를 사용하여 이러한 속성을 모두 검색합니다.
<div ng-repeat="member in people | filter: searchString">
답변
angularJs에서 filterBy를 사용하는 매우 간단한 접근 방식
작업 plnkr의 경우이 링크를 따르십시오.
http://plnkr.co/edit/US6xE4h0gD5CEYV0aMDf?p=preview
이것은 특별히 단일 속성을 사용하여 여러 열을 검색하지만 전부는 아닙니다.
<!DOCTYPE html>
<html ng-app="myApp">
<head>
<script data-require="angular.js@1.4.1" data-semver="1.4.1" src="https://code.angularjs.org/1.4.1/angular.js"></script>
<script data-require="angular-filter@0.5.2" data-semver="0.5.2" src="https://cdnjs.cloudflare.com/ajax/libs/angular-filter/0.5.2/angular-filter.js"></script>
<link rel="stylesheet" href="style.css" />
<script src="script.js"></script>
</head>
<body ng-controller="myCtrl as vm">
<input type="text" placeholder="enter your search text" ng-model="vm.searchText" />
<table>
<tr ng-repeat="row in vm.tableData | filterBy: ['col1','col2']: vm.searchText">
<td>{{row.col1}}</td>
<td>{{row.col2}}</td>
<td>{{row.col3}}</td>
</tr>
</table>
<p>This will show filter from <b>two columns</b> only(col1 and col2) . Not from all. Whatever columns you add into filter array they
will be searched. all columns will be used by default if you use <b>filter: vm.searchText</b></p>
</body>
</html>
제어 장치
// Code goes here
(function(){
var myApp = angular.module('myApp',['angular.filter']);
myApp.controller('myCtrl', function($scope){
var vm= this;
vm.x = 20;
vm.tableData = [
{
col1: 'Ashok',
col2: 'Tewatia',
col3: '12'
},{
col1: 'Babita',
col2: 'Malik',
col3: '34'
},{
col1: 'Dinesh',
col2: 'Tewatia',
col3: '56'
},{
col1: 'Sabita',
col2: 'Malik',
col3: '78'
}
];
})
})();