嗨,我试图在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:http://plnkr.co/edit/u7KpqYx8gDwaaXEvGeMn?p=preview
查看plunker
添加到下方
$scope.filtered = $filter('filter')($scope.events, $scope.query)
在$scope.filterby函数中