2017-02-09 57 views
0

你好,我正在努力解决我所遇到的问题:Angular 2 Accent Folding

我有一个自动完成的输入字段。我想为它重音。

E.g.

当我与术语mun搜索这两个词应该显示Dortmund & München

我目前拥有的是,如果我与术语mün它列出Dortmund搜索。但是,并非München

accentMap = { 
    'ü': 'u', 
    'Ü': 'u', 
    'ä': 'a', 
    'Ä': 'a', 
    'ö': 'o', 
    'Ö': 'o' 
}; 

let str = ''; 
for(let i = 0; i < input.length; i++) { 
    str += this.accentMap[input.charAt(i)] || input.charAt(i); 
} 

我然后做与str调用返回像DortmundMünchen这些条目的API。

+0

你正在使用什么样的'typeahead'?它是否由任何lib提供? – developer033

+0

ng2 bootstrap typeahead – bendajo

+0

我读了他们的文档,并且发现了'typeaheadLatinize'输入。在这种情况下不起作用吗? – developer033

回答

0

这是因为您的代码总是将“mün”转换为“mun”,因此该字符串在“Dortmund”中找到,但从未在“München”中找到。

为了解决这个问题,首先包装在一个可重复使用的功能代码:

function removeAccents(input: string){ 
    let accentMap = { 
     'ü': 'u', 
     'Ü': 'u', 
     'ä': 'a', 
     'Ä': 'a', 
     'ö': 'o', 
     'Ö': 'o' 
    }; 

    let str = ''; 

    for(let i = 0; i < input.length; i++) { 
     str += this.accentMap[input.charAt(i)] || input.charAt(i); 
    } 

    return str; 
} 

然后当你想比较对单词的列表中输入,使用这样的语句:

if(removeAccents(input) == removeAccents(word)){ 
    // The input matched the word 
}