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



我已经尽力使标题尽可能具有描述性。我有一组数据,我使用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错误。

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

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

完成后,表使用self。list作为它的数据源,但是applyFilter使用了self。模型应用过滤器。现在看起来像这样:

// Apply our filter
self.applyFilter = function () {
    // Create our filtered list
    var filteredList = $filter('filter')(self.models, self.filter);
    // Check to see if we are the same as the current list
    var isSame = angular.equals(self.list, filteredList)
    // If we are not the same
    if (!isSame) {
        // Update our scope
        self.list = filteredList;
        self.chartData = provider.getOverdueData(filteredList);
    }
};

最新更新