用于ng-repeat的AngularJS过滤器,如何访问过滤后的数据

时间:2016-09-16 09:00:59

标签: angularjs

我试图让标题尽可能具有描述性。 我有一组数据,我使用 ng-repeat 在表格中显示。还有一个应用过滤器,因此用户可以键入搜索栏,它会过滤 ng-repeat 的结果,过滤器没有什么特别之处(它是默认的过滤器即可。 这显然会过滤数据并正确显示。 问题是,我还有一个下拉列表,允许用户指定他们想要的报告类型。

指法数据原始,但他们可以选择,它会显示图表。图表的数据在加载页面时创建。它需要原始数据并将其转换为标签系列

我想要发生的是,当应用过滤器时,该函数会转换过滤后的数据,但我不知道如何实际访问该数据。 有谁知道我会怎么做呢?

更新

我尝试将过滤器添加到控制器,然后在该功能中进行转换,如下所示:

// Apply our filter
self.applyFilter = function () {
    var filteredList = $filter('filter')(self.list, self.filter);
    self.list = filteredList;
    self.chartData = provider.getOverdueData(filteredList);
};

问题在于,它被多次调用并导致 $ rootScope:infdig Infinite $ digest Loop 错误。

1 个答案:

答案 0 :(得分:0)

好的,所以错误是由每次调用 applyFilter 时创建的新数组引起的。我不确定为什么一个实际的过滤器(即在视图中)而不是在函数中,因为它们正在做同样的事情? 但我能够通过使用 angular.equals 解决这个问题。首先,当我获取数据时,我必须将结果存储到一个单独的数组中,然后当我调用过滤器时,我可以使用未修改的数组。

$sql2 = "SELECT `name`, FROM `list` WHERE country = '$regionCode[0]' AND admin1 = '$regionCode[1]' AND admin2 = '$regionCode[2]' AND city = '$city' ORDER BY 'moddate'";

完成后,该表使用 self.list 作为数据源,但 applyFilter 使用 self.models 来应用过滤到。它现在看起来像这样:

// Get our report
provider.overdueCollections().then(function (response) {
    self.models = response;
    self.list = response;
    self.predicate = 'center';
    self.chartData = provider.getOverdueData(response);
});

这意味着数据仅在更改时应用于范围。