AngularJS - how to get an ngRepeat filtered result reference
UPDATE: Here's an easier way than what was there before.
<input ng-model="query"> <div ng-repeat="item in (filteredItems = (items | orderBy:'order_prop' | filter:query | limitTo:4))"> {{item}} </div>
Then $scope.filteredItems
is accessible.
Here's the filter version of Andy Joslin's solution.
Update: BREAKING CHANGE. As of version 1.3.0-beta.19 (this commit) filters do not have a context and this
will be bound to the global scope. You can either pass the context as an argument or use the new aliasing syntax in ngRepeat, 1.3.0-beta.17+.
// pre 1.3.0-beta.19yourModule.filter("as", function($parse) { return function(value, path) { return $parse(path).assign(this, value); };});// 1.3.0-beta.19+yourModule.filter("as", function($parse) { return function(value, context, path) { return $parse(path).assign(context, value); };});
Then in your view
<!-- pre 1.3.0-beta.19 --><input ng-model="query"><div ng-repeat="item in items | orderBy:'order_prop' | filter:query | limitTo:4 | as:'filteredItems'"> {{item}}</div><!-- 1.3.0-beta.19+ --><input ng-model="query"><div ng-repeat="item in items | orderBy:'order_prop' | filter:query | limitTo:4 | as:this:'filteredItems'"> {{item}}</div><!-- 1.3.0-beta.17+ ngRepeat aliasing --><input ng-model="query"><div ng-repeat="item in items | orderBy:'order_prop' | filter:query | limitTo:4 as filteredItems"> {{item}}</div>
Which gives you access to $scope.filteredItems
.
Try something like this, the problem with the ng-repeat is that it creates child scope because of that you can't access
filteritems
from the controller
<li ng-repeat="doc in $parent.filteritems = (docs | filter:searchitems)" ></li>