我从数据库中提取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
基于代码。这个逻辑是有效的,但是它只通过子字符串进行过滤。i、 e.如果选择代码为1的cat,过滤器将返回meow和moo,因为moo的代码是F10,F1是F10的子字符串。
我想按精确匹配进行筛选。所以我搜索了stackoverflow,发现了其他几个问题,有人问同样的问题。接受的答案基本上都是相同的:将
:true
比较器到滤波器。然而,当我试着把它改成
filter: { code2: 'F' + dataCode } : true
,过滤器匹配0个结果,我得到一个空
<选择>
下拉列表中没有选择。将其设置为false或仅移除比较器即可解决问题,但此时它不再完全匹配。
我已尝试切换到使用
<option>
元素而不是
ngOptions
但无济于事。我想这可能和我把一个字符串和一个数字混在一起有关(
'F' + dataCode
)在过滤器中,所以我尝试使用
dataCode.toString()
但这也没用。如果无法修复,有人能找出我做错了什么,或者帮我创建一个自定义过滤器吗?