【发布时间】:2014-09-28 11:01:19
【问题描述】:
您好,我试图在 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,显示问题...
-
我添加了一个 plunker,这样做后我可以清楚地看到问题所在,即 console.log 在应用新过滤器之前显示(我认为),但是我不确定如何修复这。 (我应该补充一点,我对 angularjs 很陌生)
-
在控制器中进行过滤可能会更好。然后你可以访问原始数组和过滤数组
标签: javascript angularjs