Как использовать тернарный оператор в шаблоне 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

это выглядит хорошо для меня. почему вы думаете, что он не работает?

Nilesh Patel 22.12.2020 18:40

@NileshPatel, я не знаю, не работает Vue возвращает предупреждение «Не удалось разрешить фильтр: определить фильтр»

Igoohd 22.12.2020 20:36

Это потому, что это в вашем methods. Переместите его в filters.

Dan 22.12.2020 20:44

@Дэн, но как? переместить мой метод defineFilter в фильтры?

Igoohd 22.12.2020 20:49

Да, фильтры — это тоже просто функции

Dan 22.12.2020 20:50

@Dan Я пытался, но получил Невозможно прочитать свойство "$options" неопределенного

Igoohd 22.12.2020 20:53

Как правило, вы не должны использовать $options в своем компоненте. Какие данные вы фильтруете? Это больше похоже на то, что вам все равно нужен метод

Dan 22.12.2020 20:54

@Dan Я фильтрую любое число, вопрос в том, что фильтр заставляет его форматироваться с другим отображением, и эти отформатированные данные должны передаваться в качестве опоры для дочернего компонента.

Igoohd 22.12.2020 20:56

Какая переменная содержит число?

Dan 22.12.2020 20:58

@Dan — это состояние карты vuex, называемое «highlightData.available», в данном случае равно 1805,85.

Igoohd 22.12.2020 21:00
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
3
10
856
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Переместите фильтр на filters и удалите оба метода. Фильтр получит числовое значение в качестве аргумента. Поскольку в фильтре нет this доступа к компоненту, вы можете напрямую использовать предопределенные функции:

filters: {
  defineFilter(num) {
    const test = true;
    return test ? decimalFilter(num) : shortedNumberFilter(num);
  }
}

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

Другие вопросы по теме