2014-04-12 4 views
-1

이 피들을 검토하십시오. 컨트롤러에서 '필터'를 사용하려고합니다. 단추로 연결된 텍스트 상자에 제공된 검색 기준을 기반으로 검색하려는 데이터 배열이 있습니다.angularJS의 컨트롤러에서 '필터'사용

사용자가 텍스트를 입력 한 다음 Enter 키를 눌러 검색합니다. 사용자가 텍스트 상자에서 뒤로 키를 누르면 원래 목록이 다시 나타납니다.

필자는 컨트롤러에서 필터를 적용하고 싶습니다. 그래서 나는 가지고있는 것들과 일해야한다.

상담하십시오.

<div ng-app="myApp"> 
    <div ng-controller="MyCtrl"> 
<input type='text' data-ng-model='search'> 
    <button ng-click='newList()'> </button> 
     <table> <tr data-ng-repeat= "item in items"><td> {{item.name}} </td></tr></table>  

    </div> 
</div> 



var myApp = angular.module('myApp',[]); 


function MyCtrl($scope, $filter) { 
    $scope.items= [ 
    { 
    id: 0, 
    name: "Noman", 
    email: "[email protected]"}, 
{ 
    id: 1, 
    name: "Sameer", 
    email: "[email protected]"}, 
{ 
    id: 2, 
    name: "Humair", 
    email: "[email protected]"} 
];  

$scope.newList = function() { 
$scope.items = $filter('filter')($scope.items,'name',$scope.search) 
    } 
} 

http://jsfiddle.net/r7KH7/66/

+0

$ scope.items = $ 필터 ('필터') ($ true로 scope.items, $의 scope.search) 이 줄은 것 같아요 같이해야한다 . 하지만 텍스트 상자에서 텍스트를 꺼내면 목록을 다시 표시하는 방법. – Sid7201

+0

http://angulartutorial.blogspot.in/2014/03/filtering-concept-in-angular-js.html – Prashobh

답변

1

는 당신은 당신이 필터와 필터를 적용 할 필요가있는에 따라 값을 필요로하는 속성 객체를 전달하여 개체 속성을 기준으로 필터링 할 수 있습니다.

따라서, 귀하의 경우, 필터 매개 변수입니다 :

{ 
    name: $scope.search 
} 
당신은 다음과 같이 컨트롤러에 이것을 사용할 수 있습니다

:

$scope.newList = function() { 
    $scope.newItems = $filter('filter')($scope.items,{name: $scope.search}) 
}; 

주 - 표시하기 위해 다른 배열을 사용합니다 필터를 적용한 후에도 이전 내용을 새 값으로 필터링해야하기 때문에 원래 배열이 아닌 뷰에 표시됩니다.

이것은 원래 항목 목록 $scope.items을 사용하는 대신 ng-repeat 지시문에 $scope.newItems을 사용한다는 것을 의미합니다. 여기

참조 바이올린 : 모든 http://jsfiddle.net/M4yRv/

+0

의미가 있지만 사용자가 검색 텍스트 상자를 지울 때 원래 배열이 다시 나타나게 할 수있는 방법은 무엇입니까 [ 검색 버튼을 누르지 않고 백 스페이스 사용. – Sid7201

+0

사용자가 단순히 백 스페이스 키를 누르면 검색을 재설정 할 수 없으며 클릭 버튼에서만 필터를 허용합니다. 그러나 내용을 완전히 지울 때 필터를 표시하면됩니다. '$ scope. $ watch()'는 입력의 모델이고 비어있는 경우 검색을 재설정합니다. – callmekatootie

+0

알았습니다. $ watch.setarch에 변경 사항이 있는지 확인한 다음 그 이벤트를 호출 할 수 있습니다.이 이벤트는 원래 목록입니다. – Sid7201

0

첫째, 당신은 필터링 항목을 포함, 추가적인 배열을해야하고,이에 반복해야합니다. 당신이 그들의 이름 속성을 기준으로 항목을 필터링 할 때문에

둘째, 필터의 두 번째 인수는

{name: $scope.search} 

을해야합니다. 여기

은 예를 들어, 작업입니다 : http://jsfiddle.net/r7KH7/67/

관련 문제