Как в алфавитном порядке ng-repeat, который содержит заголовок с акцентами? (angularjs) - PullRequest
0 голосов
/ 28 апреля 2020

Я видел несколько вопросов об одном и том же - акценты, но ни один из них не помог мне полностью.

Итак, у меня есть div с ng-repeat="resource in resources | orderBy: title | filter: search", упорядоченный по title, так что остается в алфавитном порядке. За исключением того, что некоторые слова начинаются или содержат акценты, и они go в нижней части списка.

Здесь я видел, как кто-то использовал пользовательский фильтр для удаления акцентов, и я хотел сделать то же самое с фильтром orderBy. Я сделал это:

function slugifyFilter () {
    return function (source) {
        var accent = [
            /[\300-\306]/g, /[\340-\346]/g, // A, a
            /[\310-\313]/g, /[\350-\353]/g, // E, e
            /[\314-\317]/g, /[\354-\357]/g, // I, i
            /[\322-\330]/g, /[\362-\370]/g, // O, o
            /[\331-\334]/g, /[\371-\374]/g, // U, u
            /[\321]/g, /[\361]/g, // N, n
            /[\307]/g, /[\347]/g, // C, c
        ],
        noaccent = ['A','a','E','e','I','i','O','o','U','u','N','n','C','c'];

        for (var i = 0; i < accent.length; i++){
            source = source.replace(accent[i], noaccent[i]);
        }
        return source;
    };
}

И это работает, если используется внутри ng-repeat:

<div ng-repeat="resource in resources | orderBy: field0 | filter: search | slugify">
  {% verbatim %}{{ resource.title | slugify }}{% endverbatim %}
</div>

Все заголовки из ресурсов потеряли свои акценты, но порядок все еще был неправильным , Но я хочу сохранить акценты в списке, но работать без них в фильтре orderBy.

Затем я попытался применить его к самому ng-repeat, например:

ng-repeat="resource in resources | orderBy: (title|slugify) | filter: search"

Это дает мне ошибку: "TypeError: Cannot read property 'replace' of undefined"

Также пробовал так:

ng-repeat="resource in resources | orderBy: field0 | filter: search | slugify"

Но на этот раз у меня есть эта ошибка: TypeError: source.replace is not a function

I Я предполагаю, что это также как-то связано с source, который является массивом массивов, например:

{
    0: {id: 397, category: {…}, slug: "p397", title: Greendale, published_at: {…}, …}
    1: {id: 399, category: {…}, slug: "p399", title: Lousada, published_at: {…}, …}
}

И это почти все, что я имею до сих пор.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...