AngularJS - how to get an ngRepeat filtered result reference AngularJS - how to get an ngRepeat filtered result reference angularjs angularjs

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>