При переносе кода из проекта на asp.net core в бекенд на vue я столкнулся с тем, что хочу записать некоторые фрагменты шаблона более лаконично.
Вот исходный фрагмент:
<li class="page-item disabled" v-if="isFirst">
<a class="page-link" :href="firstUrl">««</a>
</li>
<li class="page-item" v-if="!isFirst">
<a class="page-link" :href="firstUrl">««</a>
</li>
Однако в php у меня была бы возможность написать это ещё короче, примерно вот в таком виде (неработающий код, просто концепт):
<li class="page-item {{ isFirst ? 'disabled' : '' }}">
<a class="page-link" :href="firstUrl">««</a>
</li>
Можно ли как-то это сделать в vue.js?
Такая штука вообще есть, только делается не так в лоб. Подсмотрел пример вот в этом вопросе на en so: Vue.js: Conditional class styling
В моём примере получается будет вот так:
<li :class="{ 'disabled': isFirst(), 'page-item': true }">
<a class="page-link" :href="firstUrl">«</a>
</li>
И оказывается и в документации есть про это, просто нужно было вспомнить, что это можно было применить к текущему вопросу.
Альтернативная версия, предложенная @Дмытрык:
<li :class="[{ 'disabled': isFirst()}, 'page-item']">
<a class="page-link" :href="firstUrl">«</a>
</li>
Если вывод класса нужен по условию v-if
, а количество классов и условий разрастается и всё это выводится через цикл v-for
, то нужно это дело выносить в поле computed
и визуально не перегружать шаблон. Если есть класс, который постоянно должен быть закреплен за элементом, то используется обычный html
атрибут class="some-class"
.
<div v-for="(item, index) in items">
<div class="const-class" :class="bestCompanyClass(item.id)">
<!-- -->
</div>
</div>
data: {
bestCompany: 3,
items: []
},
computed: {
bestCompanyClass() {
return (id) => {
return {
'best-company': this.bestCompany === id,
'другой-класс': условие вывода класса,
'третий-класс': условие вывода класса,
}
}
}
}
Если никаких данных в вычисляемый класс не передаётся, то:
computed: {
validatedClass() {
return {
'is-valid': this.wasValidated,
'другой-класс': условие вывода класса,
'третий-класс': условие вывода класса,
}
}
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Как сделать чтобы высота картинки в блоке была auto? Те ширина картинки всегда 100%, а высота блока подстраивалась по пропорциональной высоте...
Пробую забрать json с сервера для дальнейшей манипуляции и получаю ошибку