使用土耳其语字符时,Angular.js中的过滤无法正常工作。
输入:
<div>
Aranacak İfade: <input type="text" ng-model="searchKey" placeholder="Aramak için birşeyler girin">
</div>
<tbody>
<tr ng-repeat="personel in personeller | filter:searchKey">
<td> {{ personel.isim }} </td>
<td> {{ personel.soyisim }} </td>
<td> {{ personel.cinsiyet }} </td>
<td> {{ personel.maas }} </td>
</tr>
</tbody>
searchKey是“ istanbul”,我的表具有“İstanbul”值。但是在这种情况下没有结果。为什么会引起此问题?
此外,我尝试如下操作,但不起作用:
ng-repeat="personel in personeller | filter:searchKey || searchKey.toLocaleUpperCase('tr')
答案 0 :(得分:2)
通过直接的===
比较,İstanbul
不等于istanbul
,并且简单的直接比较是AngularJS过滤器默认所做的全部工作。
即使您对每个字符串执行toLocaleUpperCase()
,它们也将不相等,因为大写i
不是İ
,而是I
。 toLocaleUpperCase()
也无济于事,因为小写的İ
不是i
,而是i̇
。
您需要的是localeCompare()
,并提供正确的选项:
str1.localeCompare(str2, 'tr', {sensitivity: 'base'})
当两个字符串匹配时,忽略大小写和变音符,上述值将为0
。将其放入您的Web控制台:
'İstanbul'.localeCompare('istanbul', 'tr', {sensitivity: 'base'})
...,您将看到它如何显示为0
。
距离我使用AngularJS而不是较新的Angular已经很长时间了,所以我无法为您提供所需的确切代码,但是AngularJS文档显示了这一点:
{{ filter_expression | filter : expression : comparator : anyPropertyKey}}
......您要做的就是传递一个使用以上comparator
的{{1}}参数。
哦,当然...