【问题标题】:Setting angular filter :true not working设置角度过滤器:true 不起作用
【发布时间】: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 个结果,我得到一个空的 &lt;select&gt; 下拉列表,没有选择。将其设置为 false 或仅删除比较器可以解决问题,但它不再完全匹配。

我尝试改用&lt;option&gt; 元素而不是ngOptions,但无济于事。我想这可能与我在过滤器中将字符串与数字('F' + dataCode)混合有关,所以我尝试使用dataCode.toString(),但这也不起作用。如果无法修复,谁能找出我做错了什么或帮助我创建自定义过滤器?

【问题讨论】:

标签: angularjs angularjs-filter


【解决方案1】:

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

【讨论】:

  • 这不是我的问题的实际解决方案,但我将其标记为答案,因为它帮助我意识到我做错了什么。在尝试编写自己的比较器函数后,我注意到没有任何东西传递给参数。那时我回到我的&lt;select&gt; 元素并意识到我犯了一个非常基本的角度错误:我从未将我的&lt;select&gt; 绑定到模型。在我的问题中,我写了data-ng-model="data2Code",但在我的实际源代码中,我没有模型。非常初级的错误。
  • 很高兴我能帮上忙 :)
猜你喜欢
  • 2023-04-03
  • 2016-03-13
  • 1970-01-01
  • 1970-01-01
  • 2018-06-09
  • 2016-09-26
  • 1970-01-01
  • 1970-01-01
  • 2021-08-12
相关资源
最近更新 更多