我如何从angularjs中的控制器访问过滤后的数组?

tot*_*eat 0 controller filter angularjs

我在视图中有此表达式:

<div ng-repeat="friend in (filtered = (friendsData | matchnames:search.pattern)) | myLimitTo : 9 : pageIndex * 9"" >
Run Code Online (Sandbox Code Playgroud)

我做了过滤,所以我可以显示这样的东西

{{filtered.length}} 
Run Code Online (Sandbox Code Playgroud)

在效果很好的视图中,但是如何在控制器中访问此参数,以便对其进行处理?

Art*_*eev 5

您无法访问,$scope.filtered因为ng-repeat创建了新的作用域并对其进行了设置filtered

从技术上讲,您可以$scope.viewData = {}在控制器中创建并在模板中使用以下代码:

<div ng-repeat="friend in (viewData.filtered = (friendsData | matchnames:search.pattern)) | myLimitTo : 9 : pageIndex * 9"" >
Run Code Online (Sandbox Code Playgroud)

还有其他一些可能的方法可以执行类似的操作:例如,如果使用controllerAs,则可以将过滤后的数组设置为它。

但是总的来说,所有这些技巧都不是很好的做法,因为您想隐式地将变量传递给控制器​​,并且您的角度表达式看起来非常复杂。