2014-09-28 114 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

相關問題