AngularJS过滤器为true

时间:2015-10-09 14:22:09

标签: angularjs angularjs-ng-repeat angularjs-filter

我正在尝试根据帐户ID进行过滤,我只希望一次回来一条记录。我有以下代码,如果我设置过滤器:query:true,则没有数据显示。当我向ng-repeat添加true时会发生这种情况。当我将其设置为true时,为什么没有记录?这是我的代码:

<div ng-controller="LookUpCtrl as vm">
<div>
    <input type="text" id="searchText" name="searchText" ng-model="query.accountId" />
</div>
 <div ng-if="query" ng-repeat="result in vm.results | filter: query : true">
        <div class="col-lg-4"><h2>{{result.accountName}}</h2></div>
        <div class="col-lg-4"><h2>[{{result.ordernumber}}]</h2></div>
        <div class="col-lg-4">Images go here</div>
  </div> 
<div>

2 个答案:

答案 0 :(得分:2)

在AngularJS官方文档中,有一个示例说明您应该如何使用过滤器以及comparator是什么(在您的情况下为true)。

这是一个带有示例的plunker:http://plnkr.co/edit/Cv3B1j?p=preview

当您将比较器设置为true时,文档说明:“这实际上是对预期和实际的严格比较。”这意味着您在搜索框中写的内容必须准确无误与您要过滤的对象中的字段相同。

如果你想要你可以提供一个plunker,这样就可以更容易地重现你的错误并解决它。

修改

现在我明白了你的问题。这是一个有效的插图:

http://plnkr.co/edit/pFd5bOmnm2nEL98TJgi5

问题是你的Id是一个数字,而不是一个字符串。

如果您仍想将ID作为数字进行管理,则可以设置类型编号的输入。 <input type="number" id="searchText" name="searchText" ng-model="query.accountId" />

答案 1 :(得分:2)

查看代码后,我现在可以看到为什么在使用accountId进行过滤时数据没有出现。响应对象中的值是一个整数,文本框中的比较输入是一个字符串。在进行严格搜索时,这永远不会评估为真。当accountId值为字符串时,我能够在您的plunker中正确过滤。您的阵列测试中有一些新对象。

{
  accountId: '3',
  ...
  name: 'Mr. This'  
},
{
  accountId: '4',
  ...
  name: 'Mr. That'
},
{
  accountId: '44',
  ...
  name: 'Mr. This'
}

以下是与您的plunker的更新链接(更新为加载角度和应用程序)。请忽略我重新配置控制器结构..

http://plnkr.co/edit/eZUayzldWmSEOjnkPceZ?p=preview