【问题标题】:Angularjs working with $filter filterAngularjs 使用 $filter 过滤器
【发布时间】:2016-11-03 15:10:41
【问题描述】:

我正在尝试使用 $filter 过滤从控制器中的 JSON 文件检索到的数据集。 这是 JSON 文件中的数据:

[{
    "keyword": "key1",
    "path": "path1"
}, {
    "keyword": "key2",
    "path": "path2"
}, {
    "keyword": "key3",
    "path": "path3"
}, {
    "keyword": "key4",
    "path": "path4"
}, {
    "keyword": "key5",
    "path": "path5"
}]

然后我像这样在控制器中获取数据:

$http.get('/sampleJson.txt').then(function (response) {
    vm.resultSet=response.data;
});

然后我使用 $filter 过滤数据:

vm.results=$filter('filter')(vm.resultSet, {keyword: "key1"});

最后我使用 ng-repeat 在视图中显示数据:

<tbody>
    <tr ng-repeat="result in vm.results">
    <td><a href="{{result.path}}">{{result.keyword}}</a></td>
   <td>{{result.keyword}}</td>
   </tr>
</tbody>

但是结果变量是空的,没有任何显示。这似乎是非常基本的东西,但是我不知道出了什么问题? PS:当我在控制器中声明其他变量时:

vm.message="Hello, Angular!"

它显示在视图中。

【问题讨论】:

    标签: angularjs angular-filters


    【解决方案1】:

    我使用 $scope 编写了一个解决方案。此解决方案中的过滤器有效。我不知道你为什么使用 vm 但 $http 服务工作正常,并且行

    vm.results=$filter('filter')(vm.resultSet, {keyword: "key1"});
    

    应该在 then() 函数的主体中。

    这是一个小插曲

    https://plnkr.co/edit/gwx90oN0cf62JuUF5t2k?p=preview

    【讨论】:

      【解决方案2】:

      $http 是异步的,.then (vm.resultSet=response.data;) 在vm.results=$filter('filter')(vm.resultSet, {keyword: "key1"}); 之后执行(当promise 得到解决时)

      试试这个,

      $http.get('/sampleJson.txt').then(function (response) {
          vm.resultSet=response.data;
          vm.results=$filter('filter')(vm.resultSet, {keyword: "key1"});
      });
      

      【讨论】:

      • 是的,你是对的。我接受了另一个答案作为解决方案,只是因为早一点发布。谢谢
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-02-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-23
      • 2018-09-18
      相关资源
      最近更新 更多