Мне нужно отсортировать метки в angular. Я делаю это из файла component.ts. Сортировка работает нормально. Он задает ключевое значение метки для сортировки. Но мое приложение на двух языках. поэтому сортировка с помощью ключа не работает, когда я переключаюсь на другой язык. Есть ли способ отсортировать его на любом языке
getlabel(Id: string): Observable<Dto[]> {
return this.httpClient
.get(
url
)
.pipe(
map((data: any) => {
data.sort((a, b) => {
return a.label > b.label ? 1 : -1
})
return data
})
) as Observable
}





Используйте функцию localeСравнить:
.pipe(
map((data: any) => {
return data.sort((a, b) => {
return a.label.localeCompare(b.label, 'he');
})
})
) as Observable
'he' для иврита, измените его на свой код языка
Это иврит
у меня два языка en и fr
Знаете ли вы, какой текущий язык отображения в каждый момент времени? вы пишете "когда я переключаюсь на другой язык", когда вы переключаете язык, сохраняете его в локальной переменной и передаете в localeCompare func
хорошо, я понял, как использовать сравнение локали для сортировки на обоих языках, но сортировка не меняется, пока я не перезагружу страницу. Предположим, что это английский, он сортируется, а затем, когда я нажимаю на французский, он остается с английской сортировкой, пока я не перезагружу страницу.
я думаю, что мне нужно использовать onLanguagechange, но могу ли я использовать его в сервисе
Это ошибка в вашем коде, я обновлю ответ, чтобы исправить ее для вас.
А также? все еще нет изменений в отсортированном списке?
не сортирует, если не обновляется после смены языка
Это потому, что вы не выполняете это наблюдаемое в событии «переключить язык». когда вы переключаете свой язык, вызовите эту функцию, чтобы отсортировать список с новым кодом языка.
Я создам простую демонстрацию, чтобы показать вам. Как вы «когда я переключаюсь на другой язык», это с тегом select?
Давайте продолжить обсуждение в чате.
Это работает для сортировки на разных языках
.pipe(
map((data: any) => {
data.sort((a, b) => {
return this.translate
.instant(a.label)
.localeCompare(this.translate.instant(b.label))
})
return data
})
) as Observable
function sortByKey(array: [], key: any, sortType = '') {
if (!array.length) {
return array;
}
return array.sort((a, b) => {
if (sortType === 'desc') {
if (b[key] < a[key]) { return -1; }
if (b[key] > a[key]) { return 1; }
} else {
if (a[key] < b[key]) { return -1; }
if (a[key] > b[key]) { return 1; }
}
return 0;
});
}
Пожалуйста, рассмотрите возможность предоставления Минимальный воспроизводимый пример, если это возможно. Таким образом, более вероятно, что волонтеры SO смогут вам помочь.