computed: {
cartTotalCost() {
return this.cart_data.reduce((acc, n) => acc + n.price * n.amount, 0);
},
...
isValid() {
return Object.values(obj).flatMap(Object.values).every(n => n.valid);
},
objects() {
return Object.values(this.obj).flatMap(Object.values);
},
isValid() {
return this.objects.every(n => n.valid);
},
каким образом в текущей реализации можно при клике на кнопку "назад" вернуть первоначальный вид массива pollLis
pollList
новое значение, старое вы теряете безвозвратно.pop
. Кнопка "назад" - блокировать или не отображать, если размер стека меньше двух.<router-link :to="`/Product/${item}`">{{ item }}</router-link>
data: () => ({
handle: null,
...
}),
mounted() {
const mql = matchMedia('(max-width: 768px)');
const onChange = () => this.handle = mql.matches ? '.image' : null;
onChange();
mql.addEventListener('change', onChange);
this.$on('hook:beforeDestroy', () => mql.removeEventListener('change', onChange));
},
<draggable
:options="{ handle, ... }"
...
>
computed: {
deadlineText() {
const today = new Date().setHours(0, 0, 0, 0);
const deadline = new Date(this.task.deadline).setHours(0, 0, 0, 0);
return [ 'Уже было', 'Сегодня', 'Жди' ][1 + Math.sign(deadline - today)];
},
},
data: () => ({
selected: [ null, null, null ],
...
}),
computed: {
selectData() {
const data = Array.from({ length: this.selected.length }, () => []);
for (let { items } = this.selectors, i = 0; items && i < data.length; i++) {
data[i] = items;
items = items.find(n => n.value === this.selected[i])?.childs;
}
return data;
},
...
},
methods: {
resetSelected(index) {
for (let i = index; i < this.selected.length; i++) {
this.selected[i] = null;
}
},
...
},
<v-col v-for="(n, i) in selected" cols="4">
<v-select
:items="selectData[i]"
item-text="title"
item-value="value"
v-model="selected[i]"
@change="resetSelected(i + 1)"
></v-select>
</v-col>
В документации не нашел ответа, как и похожего решения.
mounted() {
this.fetchPosts()
},
watch: {
'$route.query.page': {
immediate: true,
handler: 'fetchPosts',
},
},
<script setup>
import { Navigation, Pagination, Scrollbar, A11y } from 'swiper';
import { Swiper, SwiperSlide } from 'swiper/vue';
const onSwiper = (swiper) => console.log(swiper);
const onSlideChange = () => console.log('slide change');
const modules = [ Navigation, Pagination, Scrollbar, A11y ];
</script>
<style>
@import 'swiper/css';
@import 'swiper/css/navigation';
@import 'swiper/css/pagination';
@import 'swiper/css/scrollbar';
</style>
Вроде делаю как в документации
get the Swiper instance in components inside of Swiper
import { ref } from 'vue';
setup() {
const swiper = ref();
return {
swiper,
onSwiper: instance => swiper.value = instance,
...
};
},
<swiper
@swiper="onSwiper"
...
>
:readonly="`${item.isReadonly}`"
false
будет "false"
, а булевым эквивалентом любой непустой строки является true
. props: {
active: Boolean,
},
data: () => ({
active: null,
}),
<v-button
v-for="i in 3"
:active="active === i"
@click="active = active === i ? null : i"
>
V-model="filterPriceFrom"
V-model="filterPriceTo"
props:['FilterPriceFrom', 'FilterPriceTo', "FilterCategoryId"],
v-model
совместно с входными параметрами особого смысла нет. Потому чтоВсе входные параметры образуют одностороннюю привязку между дочерним свойством и родительским: когда родительское свойство обновляется — оно будет передаваться дочернему, но не наоборот.
v-model="параметр"
на:value="параметр" @input="$emit('update:параметр', $event.target.value)"