嗨Im试图围绕angularjs过滤器的长度建立功能,虽然它的工作,因为它应该在视图中,在控制器中的变量似乎保持过时...过滤器变量不更新在控制器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,显示了问题... – harishr 2014-09-28 12:08:32
我已经添加了一个活塞,这样做后我可以清楚地看到问题所在,即console.log在新过滤之前显示应用(我认为),但林不知如何解决这个问题。 (我应该补充说,我对angularjs来说很新颖) – Adrian 2014-09-28 12:32:17
可能更好,只是在控制器中进行过滤。然后你可以访问原始数组和过滤数组 – charlietfl 2014-09-28 12:36:45