2014-09-28 110 views
0

嗨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

+0

你可以设置一个plunker,显示了问题... – harishr 2014-09-28 12:08:32

+0

我已经添加了一个活塞,这样做后我可以清楚地看到问题所在,即console.log在新过滤之前显示应用(我认为),但林不知如何解决这个问题。 (我应该补充说,我对angularjs来说很新颖) – Adrian 2014-09-28 12:32:17

+0

可能更好,只是在控制器中进行过滤。然后你可以访问原始数组和过滤数组 – charlietfl 2014-09-28 12:36:45

回答

1

退房的plunker

在$ scope.filterby功能如下

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

添加

+0

谢谢你排序的问题! – Adrian 2014-09-28 12:50:28

相关问题