【问题标题】:How can i access my filtered array from controller in angularjs?如何从 angularjs 中的控制器访问过滤后的数组?
【发布时间】:2015-10-27 19:37:11
【问题描述】:

我在视图中有这个表达式:

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

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

{{filtered.length}} 

在视图中效果很好,但是我如何在控制器中访问这个参数以便我用它做一些事情?

【问题讨论】:

  • 这个显示我未定义
  • @totothegreat 试试这个 plnkr plnkr.co/edit/AFT7ymvNiioCg4bH4B3j?p=info 让我知道它是否适合你。
  • 如果您没有在控制器中预先定义过滤变量,它会在 ng-repeat 自己的范围内创建。如果您在控制器中声明像 $scope.filtered = []; 一样过滤,我认为它应该可以工作..
  • @Rebornix 他想访问已过滤的,而不是他示例中的“朋友”或您的 plnkr 中的“人”。
  • 那个plunker做到了,我应该使用“this”并对其应用更改,谢谢!

标签: angularjs filter controller


【解决方案1】:

您无法访问$scope.filtered,因为ng-repeat 创建了一个新范围并将filtered 设置为它。

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

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

还有一些其他可能的方法来做类似的事情:例如,如果您使用controllerAs,您可以为其设置过滤数组。

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

【讨论】:

    猜你喜欢
    • 2016-07-28
    • 2023-03-13
    • 2016-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-25
    • 2015-12-06
    • 2014-07-14
    相关资源
    最近更新 更多