2017-02-09 6 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 к API, который возвращает эти записи, как Dortmund или München.

+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 
}