【问题标题】:Filter variable not updating in controller angularjs过滤器变量未在控制器 angularjs 中更新
【发布时间】: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:http://plnkr.co/edit/u7KpqYx8gDwaaXEvGeMn?p=preview

【问题讨论】:

  • 你能设置一个plunker,显示问题...
  • 我添加了一个 plunker,这样做后我可以清楚地看到问题所在,即 console.log 在应用新过滤器之前显示(我认为),但是我不确定如何修复这。 (我应该补充一点,我对 angularjs 很陌生)
  • 在控制器中进行过滤可能会更好。然后你可以访问原始数组和过滤数组

标签: javascript angularjs


【解决方案1】:

查看plunker

添加在下方

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

在 $scope.filterby 函数中

【讨论】:

  • 感谢您解决问题!
猜你喜欢
  • 1970-01-01
  • 2017-05-22
  • 2015-10-19
  • 2017-06-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多