Angular.js过滤器不适用于土耳其语字符

时间:2019-09-02 11:47:11

标签: javascript angularjs angular-filters

使用土耳其语字符时,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')

1 个答案:

答案 0 :(得分:2)

通过直接的===比较,İstanbul不等于istanbul,并且简单的直接比较是AngularJS过滤器默认所做的全部工作。

即使您对每个字符串执行toLocaleUpperCase(),它们也将不相等,因为大写i不是İ,而是ItoLocaleUpperCase()也无济于事,因为小写的İ不是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}}参数。

哦,当然...

'İstanbul' !== 'Constantinople'