JohnDaniels
@JohnDaniels

Почему не работает фильтр?

Мне понадобился фильтр, который выделял бы некоторые слова в тексте.
Я сделал так:

Vue.filter('highlight', function(value, data){
    data.forEach(function(el, i, ar){
        value.replace(el, '<b>' + el + '</b>')
    })
    return value
});

В компоненте вызываю:

<p>{{ text | highlight(arData)  }}  </p>

//
<script>
 export default{
        data(){
            return{
                text: 'тут некоторый текст',
                arData: ['тут', 'текст']
            }
        }
}
</script>

Получаю ошибку TypeError: value is undefined.
То есть, в калбэк фильтра не передается первый аргумент. Что я делаю не так? Разве он не должен подставляться туда автоматически?
  • Вопрос задан
  • 741 просмотр
Решения вопроса 1
sfi0zy
@sfi0zy
Creative frontend developer
в калбэк фильтра не передается первый аргумент. Что я делаю не так? Разве он не должен подставляться туда автоматически?

Должен. Сделал демку на codepen, там все работает (тут есть логическая ошибка - value.replace не меняет значение value).

Насколько я понял, вы хотите сделать жирный текст на странице. Но для того, чтобы полученная строка интерпретировалась как html, нужно использовать v-html, а внутри него фильтры не работают (они работают только в {{ ... }} и v-bind). Так что стоит склониться к использованию computed-свойства вместо фильтра.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы