2014-09-28 4 views
0

안녕하세요, angularjs에서 필터의 길이를 중심으로 기능을 구현 하려는데 뷰에서 컨트롤러가 작동해야하지만 변수가 오래된 것처럼 보입니다 ...컨트롤러 변수가 컨트롤러 컨트롤러에서 업데이트되지 않습니다

아래 div를 클릭하면 목록이 필터링되고 filterby 함수가 호출됩니다. 새로 필터링 된 목록 길이의 출력은보기에서 올바르게 업데이트됩니다. 그러나 함수 자체에서 나는 로그 집합을 가지고 있으며 div를 클릭하면 여전히 이전 길이를 보여줍니다.

<div ng-repeat="filter in filters" ng-click="filterby(filter.filter_type)">{{filter.filter_type}}</div> 

<ul> 
    <li ng-repeat="event in filtered = (events | filter:query) | orderBy:'-event_date' "> 
     <span >{{event.event_date}},{{event.event_name}}, {{event.event_venue}}, {{event.event_description}} </span> 
    </li> 
</ul> 

<br />Length of filtered items {{filtered.length}} 

그리고 내보기

....
 $scope.filterby = function(filterby) { 
      if (filterby == 'ALL') { 
      $scope.query = ''; 
      } 
      else { 
      $scope.query = filterby; 

      } 
      console.log($scope.filtered.length); 
    }; 

내 필터 데이터 :

 $scope.filters = [ 
     {'filter_type' : 'ALL'}, 
     {'filter_type' : 'Macnass'} 
     ]; 

편집 : 확인이 아니 그것은 이전 값을 보여주는, 전혀 작동 못한 자하는 것이 마치 한 번만 클릭하면 마치 목록의 내용이 변경된 후에 뷰의 변수가 업데이트된다는 사실과 관련이 있습니다. 그러나 컨트롤러의 변수를 보호하는 방법에 대한 최신 정보는 없습니다.

Plunker : $의 scope.filterby 기능에

$scope.filtered = $filter('filter')($scope.events, $scope.query) 

아래에 추가 plunker

밖으로 http://plnkr.co/edit/u7KpqYx8gDwaaXEvGeMn?p=preview

+0

할 수 있습니다를 셋업 plunker 문제를 보여주는 ... – harishr

+0

나는 plunker를 추가했다. 문제가 무엇인지 분명하게 볼 수있다. 즉, 새로운 filte 전에 console.log가 보여지고있다. r이 적용됩니다 (제 생각에는), 그러나 Im을 고쳐야합니다. (저는 anglejs에 새로운 것을 추가해야합니다) – Adrian

+0

아마 컨트롤러에서 필터링하는 것이 좋습니다. 그런 다음 원본 배열 및 필터링 된 배열에 액세스 할 수 있습니다. – charlietfl

답변

1

체크

+0

문제를 정렬 해 주셔서 감사합니다! – Adrian

관련 문제