我从数据库中提取了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()
,但这也没有用。任何人都可以弄清楚我做错了什么或帮助我创建一个自定义过滤器,如果这不能修复?
答案 0 :(得分:1)
如果您认为问题出在过滤器上,那么根据docs,而不是使用true
,编写比较器函数并进行自己的松散比较。如果这不会导致您的预期行为,那么您的问题就在其他地方,如果没有代码的功能示例,则无法解决。