#javascript #function #vue.js #vuejs2 #vue-component
#javascript #функция #vue.js #vuejs2 #vue-компонент
Вопрос:
У меня есть приложение для установки фильтра в зависимости от настольного или мобильного дизайна, но троичный оператор не работает.
Вот вызов компонента:
<Metric
prefix="R$"
:is-numeric-subvalue="false"
:is-total="true"
subvalue="Abril à Maio"
title="Disponível"
:value="highlightData.available | defineFilter()"
/>
Вот мой метод определения фильтра:
methods: {
defineFilter () {
const test = true
const filter = test ? this.$options.filters.decimal(0) : this.$options.filters.shortedNumber()
return filter
}
}
Мои фильтры:
filters: {
decimal: decimalFilter,
shortedNumber: shortedNumberFilter
}
Я получил предупреждение:
[Предупреждение Vue]: не удалось разрешить фильтр: defineFilter
Комментарии:
1. для меня это выглядит хорошо. как вы думаете, почему он не работает?
2. @NileshPatel я не знаю, не работает, Vue возвращает предупреждение «Не удалось разрешить filter: defineFilter»
3. Это потому, что это в вашем
methods
. Переместите его вfilters
.4. @Dan но как? переместить мой метод defineFilter в filters?
5. Да, фильтры — это тоже просто функции
Ответ №1:
Переместите фильтр в filters
и удалите оба метода. Фильтр получит числовое значение в качестве аргумента. Поскольку в фильтре нет this
доступа к компоненту, вы можете напрямую использовать свои предопределенные функции:
filters: {
defineFilter(num) {
const test = true;
return test ? decimalFilter(num) : shortedNumberFilter(num);
}
}
Убедитесь, что обе ваши внешние функции готовы к получению числа и возвращению значения. Вот демонстрация