【问题标题】:How to use an object that is filtered by its properties in angular controller?如何在角度控制器中使用由其属性过滤的对象?
【发布时间】:2017-04-25 20:03:50
【问题描述】:

我正在说明一个堆叠图及其表格,并使用 $http.get() 获取其 json 数据并将其设置为 $scope.dataset

html:

<input ng-model="_searchQuery.key1.key2">
<tr  ng-repeat="(key, value) in dataset | filter:_searchQuery ">

我如何在控制器中更新$scope.dataset

_searchQuery 匹配 dataset 并像魅力一样过滤我的表格。无需在控制器中编写任何代码。即dataset.key1.key2反映到_searchQuery.key1.key2

但是对于我的 nvd3.js 堆叠图,我必须在 DOM 中以相同的方式过滤 $scope.dataset$scope.dataset = $filter('$scope._searchQuery.key1.key2')($scope.dataset) 犯了一个错误。我关注 Angular 文档和此链接:How to use a filter in a controller?

【问题讨论】:

  • 您有什么理由使用 interpolate 而不是仅仅将 $filter 注入控制器?
  • @Sasang 与过滤器的结果相同。有没有不使用 ng-change 并且每次都调用 $scope.apply 的干净方法?
  • 你是直接使用nvd3库吗?如果是这样,请考虑使用 angular 指令:angular-nvd3。在这种情况下,只需在接收/选择新数据时更改图形数据集,然后调用 nvd3 3 属性上的刷新方法:`$scope.api.refresh()`。您不需要在 ng-change 或使用 scope.apply 上触发任何内容
  • 感谢指导。让我检查一下。
  • 驾驶室你更新你的问题以包含更多代码,也许是一个基本的视图和控制器,所以我可以摆弄它。

标签: javascript angularjs filter angularjs-interpolate


【解决方案1】:

这可能是一个重复的问题How do I filter an array with AngularJS and use a property of the filtered object as the ng-model attribute?

同样的解决方案对我有用:

首先:我必须将 controller 中的 $scope._searchQuery 实例化为 object 并包含其属性。

第二个:更新$scope.dataset - 对象属性过滤的关键字是filter,我在玩_searchQuery

语法帮助我解决了这个问题: $scope.dataset = $filter('filter')($scope.dataset,$scope._searchQuery.key1.key2);

看起来不可能将超过 2 个 args 传递给 $filter,因此要根据更多输入进行过滤,我必须复制同一行并将 $scope._searchQuery.key1.key3 传递给它。

【讨论】:

    猜你喜欢
    • 2016-08-06
    • 2017-04-04
    • 1970-01-01
    • 2017-10-08
    • 1970-01-01
    • 1970-01-01
    • 2017-03-21
    • 2016-08-07
    • 1970-01-01
    相关资源
    最近更新 更多