Официальная документация Vue описывает один метод условного рендеринга компонентов с использованием v-if, v-else-if и v-else. В этой статье я представлю альтернативный метод, который можно использовать для условного рендеринга текста или значков.
Стандартное решение
<template> <p v-if="2+2 == 4"> Hello </p> <p v-else> Goodbye </p> </template>
Здесь «Hello» отображается, когда условие, указанное в v-if, оценивается как true. В противном случае отображается сообщение «До свидания». Этот синтаксис чрезвычайно распространен и официально рекомендован Vue.
Альтернатива
Часто в качестве альтернативы я использую синтаксис усы Vue в сочетании с тернарным оператором JavaScript для условного рендеринга текста или значков.
<template> <p> {{ 2+2 == 4 ? 'Hello' : 'Goodbye' }} </p> </template>
Приведенный выше код отображает Hello, так как 2+2==4 соответствует действительности. Тот же принцип можно использовать для условного рендеринга значков.
<template> <v-icon> {{ 2+2 == 5? 'mdi-edit' : 'mdi-delete' }} </v-icon> </template>
В приведенном выше примере будет отображаться значок mdi-delete, поскольку 2+2==5 является ложным. Этот метод использует тернарный оператор для упрощения операторов if-else. В общем, синтаксис тернарного оператора JavaScript выглядит следующим образом:
condition ? expressionOne : expressionTwo;
В приведенном выше примере expressionOne оценивается, когда условие истинно, а expressionTwo оценивается, когда условие ложно. Мы можем использовать тернарный оператор внутри усов, чтобы писать условные операторы в одной строке.
Вот простой рабочий пример программы:
<template> <div> <h1> {{ isOn ? 'On' : 'Off' }} </h1> <button @click="isOn = !isOn"> {{ isOn ? 'click to turn off' : 'click to turn on' }} </button> </div> </template> <script> export default { name: 'HelloWorld', data: function() { return { isOn: true, }; } } </script>
В простых случаях этот подход может сократить код и повысить его читабельность.