设置角度过滤器:true不起作用

时间:2016-01-06 19:36:19

标签: angularjs angularjs-filter

我从数据库中提取了2个数据。每个都以JSON对象数组的形式返回,存储在angular $ scope变量中,如下所示:

$scope.data =
[{ code: 1, text: cat },
 { code: 2, text: dog },
 { code: 10, text: cow }]

$scope.data2 = 
[{ code1: 1, code2: F1, text: meow},
 { code1: 2, code2: F2, text: woof},
 { code1: 3, code2: F10, text: moo}]
准确地说,

$scope.data是一个包含11个对象的数组,其中每个对象的code:字段为1,2,3,4,5,6,7,8,10,11,12 。$scope.data2是一个包含100个对象的数组,其中code2:字段可以是F1,F2,F3,F4,F5,F6,F7,F8,F10,F11,F12。

然后我有两个html <select>元素,这两个元素都由这两个数组填充,如下所示:

Option 1<select data-ng-model="dataCode" data-ng-options="a.code as a.text for a in data"></select>
Option 2<select data-ng-model="data2Code" data-ng-options="a.code1 as a.text for a in data2 
| filter: { code2: 'F' + dataCode }"></select>

我试图实现的功能是,当您从$scope.data中选择一个项目时,它会根据代码过滤$scope.data2中显示的项目。这个逻辑有效,但是这只是按子串过滤。即如果选择代码为1的cat,则过滤器将返回meow和moo,因为moo的代码是F10而F1是F10的子字符串。

我希望按完全匹配进行过滤。所以我搜索了stackoverflow并发现了一些人们问同样事情的其他问题。所接受的答案大致相同:将:true比较器附加到过滤器。但是,当我尝试将其更改为filter: { code2: 'F' + dataCode } : true时,过滤器匹配0结果,我得到一个没有选择的空<select>下拉列表。将其设置为false或仅删除比较器可以解决问题,但它不再是完全匹配的问题。

我尝试过使用<option>元素代替ngOptions,但无济于事。我想也许这与我在过滤器中混合一个带有数字('F' + dataCode)的字符串有关,所以我尝试使用dataCode.toString(),但这也没有用。任何人都可以弄清楚我做错了什么或帮助我创建一个自定义过滤器,如果这不能修复?

1 个答案:

答案 0 :(得分:1)

如果您认为问题出在过滤器上,那么根据docs,而不是使用true,编写比较器函数并进行自己的松散比较。如果这不会导致您的预期行为,那么您的问题就在其他地方,如果没有代码的功能示例,则无法解决。