2016-01-06 50 views
0

我从数据库中拉出2条数据。每个返回在JSON对象的阵列的形式,存储在角$范围的变量,并且看起来像这样:设置角度过滤器:true不起作用

$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,则过滤器将返回喵喵声以及moo,因为moo的代码是F10,F1是F10的子串。

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

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

+0

它为我http://plnkr.co/edit/9FjFAyvC1wTQ2hRaUzNr?p=preview工作。你使用什么角度的版本?我还注意到,你的数据中的'code2'和'text'属性值没有引号 – PrinceG

回答

1

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

+0

这不是我的问题的实际解决方案,但我将它标记为答案,因为它帮助我意识到了什么我做错了。在试图编写我自己的比较函数后,我注意到没有任何内容被传递给参数。那时我回到了我的''绑定到模型上。在我的问题中,我编写了'data-ng-model =“data2Code”',但在我的实际源代码中,我没有模型。非常基本的错误。 – bscott

+0

很高兴我可以帮助:) –