【发布时间】:2016-01-06 19:36:19
【问题描述】:
我从数据库中提取 2 条数据。每个都以 JSON 对象数组的形式返回,存储在角度 $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 中显示的项目。此逻辑有效,但这仅按子字符串过滤。即,如果您选择 cat,其代码为 1,则过滤器将返回 meow 以及 moo,因为 moo 的代码是 F10,而 F1 是 F10 的子字符串。
我想按完全匹配过滤。所以我搜索了stackoverflow,发现了其他几个人问同样的问题。接受的答案几乎都是相同的:将:true 比较器附加到过滤器。但是,当我尝试将其更改为 filter: { code2: 'F' + dataCode } : true 时,过滤器匹配 0 个结果,我得到一个空的 <select> 下拉列表,没有选择。将其设置为 false 或仅删除比较器可以解决问题,但它不再完全匹配。
我尝试改用<option> 元素而不是ngOptions,但无济于事。我想这可能与我在过滤器中将字符串与数字('F' + dataCode)混合有关,所以我尝试使用dataCode.toString(),但这也不起作用。如果无法修复,谁能找出我做错了什么或帮助我创建自定义过滤器?
【问题讨论】:
-
它为我工作 plnkr.co/edit/9FjFAyvC1wTQ2hRaUzNr?p=preview 。您使用的是什么角度版本?我还注意到您的数据中的
code2和text属性值中没有引号
标签: angularjs angularjs-filter