简体   繁体   English

无法在ngRepeat中引用过滤后的数组-AngularJS

[英]Unable to reference filtered array in ngRepeat - AngularJS

I have an ngRepeat directive that is filtered as: 我有一个ngRepeat指令,其过滤为:

<li ng-repeat='item in items | filter:searchTerm as filteredItems'>{{item.name}}</li>

I am tring to access the filteredItems in my controller like $scope.filteredItems but I'm getting an undefined. 我特林访问filteredItems在我的控制器像$scope.filteredItems但我发现了一个未定义的。 How should I solve this? 我该如何解决?

I have nested controllers. 我有嵌套的控制器。 Is the problem with $scope ? $scope是否有问题?

My controllers are something like this in my view: 我的控制器在我看来是这样的:

<div ng-controller='MainController'>
 <div ng-controller='FilterController'>
  <li ng-repeat='item in items | filter:searchTerm as filteredItems'>{{item.name}}</li>
 </div>
</div>

I'm trying to access $scope.filteredItems in FilterController . 我正在尝试访问FilterController $scope.filteredItems

You can use assigning in ng-repeat expression like ng-repeat='item in filteredItems = (items | filter:searchTerm)' 您可以在ng-repeat表达式中使用分配,例如ng-repeat='item in filteredItems = (items | filter:searchTerm)'
NOTE: in comment was wrong variant, because assigning more priority than pipe. 注意:在注释中是错误的变体,因为分配的优先级高于管道。

 var appModule = angular.module('app', []); appModule.controller('MainController', function ($scope) { //some functions and variables here $scope.items = [ {name:'1234'}, {name:'2341'}, {name:'3412'}, {name:'4123'}, {name:'4321'} ]; }); appModule.controller('FilterController', function ($scope) { }); 
 <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.2/angular.js"></script> <div ng-app="app" ng-controller='MainController'> <div ng-controller='FilterController'> <!-- FilterController has many filters that are not related --> <input type="text" ng-model="searchTerm" /> <ul> <li ng-repeat='item in filteredItems = (items | filter:searchTerm)'>{{item.name}}</li> </ul> {{filteredItems}} </div> </div> 

but seems that better filter in controller: 但似乎在控制器中更好的过滤器:

 var appModule = angular.module('app', []); appModule.controller('MainController', function ($scope) { //some functions and variables here $scope.items = [ {name:'1234'}, {name:'2341'}, {name:'3412'}, {name:'4123'}, {name:'4321'} ]; }); appModule.controller('FilterController', function ($scope,$filter) { var filter = $filter('filter'); $scope.filter = function(){ $scope.filteredItems = filter($scope.items, $scope.searchTerm); } $scope.filter(); }); 
 <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.2/angular.js"></script> <div ng-app="app" ng-controller='MainController'> <div ng-controller='FilterController'> <!-- FilterController has many filters that are not related --> <input type="text" ng-model="searchTerm" ng-change="filter()" /> <ul> <li ng-repeat='item in filteredItems'>{{item.name}}</li> </ul> {{filteredItems}} </div> </div> 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM