안녕하세요, 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
할 수 있습니다를 셋업 plunker 문제를 보여주는 ... – harishr
나는 plunker를 추가했다. 문제가 무엇인지 분명하게 볼 수있다. 즉, 새로운 filte 전에 console.log가 보여지고있다. r이 적용됩니다 (제 생각에는), 그러나 Im을 고쳐야합니다. (저는 anglejs에 새로운 것을 추가해야합니다) – Adrian
아마 컨트롤러에서 필터링하는 것이 좋습니다. 그런 다음 원본 배열 및 필터링 된 배열에 액세스 할 수 있습니다. – charlietfl