data: () => ({
repeat: 0,
}),
<child-component v-for="i in repeat"></child-component>
<button @click="repeat++">add one more child component instance</button>
data: () => ({
items: [ ... ], // массив данных
columns: 666, // количество колонок, на которые надо разбить items
}),
computed: {
columnItems() {
const { items, columns } = this;
const colSize = Math.ceil(items.length / columns);
return Array.from(
{ length: columns },
(n, i) => items.slice(i * colSize, (i + 1) * colSize)
);
},
},
<ul v-for="col in columnItems">
<li v-for="n in col">{{ n }}</li>
</ul>
<img v-for="i in 5" :src="i > ratingValue ? whiteStar : blackStar">
functional: true,
render: (h, ctx) => h('div', Array(ctx.props.количествоПовторений).fill(ctx.slots().default)),
<option
v-for="(n, i) in options"
v-text="n"
v-bind="!i && { disabled: true, value: '' }"
></option>
<option disabled value="">выбирай!</option>
<option v-for="n in options">{{ n }}</option>
data: () => ({
items: [
{ show: true, ... },
{ show: true, ... },
...
],
}),
<template v-for="(n, i) in items">
<button @click="n.show = !n.show">{{ n.show ? 'hide' : 'open' }}</button>
<div class="list" v-show="n.show">
...
</div>
<hr v-if="i !== items.length - 1">
</template>
С v-for я знаю как, а без него никак?
totalTon() {
return this.number * this.options.find(n => n.value === this.selected).ton;
},
:value="option.value"
сделайте :value="option"
.total() {
return this.number * this.selected.value;
},
totalTon() {
return this.number * this.selected.ton;
},
v-model="sum[product.id]"
на :value="sum[product.id]" readonly
.sum() {
return Object.fromEntries(Object.entries(this.price).map(n => ([
n[0],
(this.result[n[0]] || 0) * n[1],
])));
},
@click="e => e.stopImmediatePropagation()"
в дочернем компоненте.stop
, нужен объект события. Его можно прокидывать из компонента, на экземпляре которого ловите клик, т.е., там на корневом элементе должно быть @click="$emit('click', $event)"
. Или, добавляем модификатор native
: @click.native.stop
. tbody
- их в таблице может быть несколько. Нулевой элемент переданного массива отображается всегда, а остальные по условию. Как-то так:props: [ 'items' ],
data: () => ({
showAll: false,
}),
<tbody>
<tr>
<td>{{ items[0] }}</td>
<td>
<button
v-if="items.length > 1"
v-text="showAll ? '-' : '+'"
@click="showAll = !showAll"
></button>
</td>
</tr>
<template v-if="showAll">
<tr v-for="n in items.slice(1)">
<td>{{ n }}</td>
<td></td>
</tr>
</template>
</tbody>
<table>
<v-tbody v-for="n in items" :items="n" />
</table>
<template #thumb-label="{ value }">
{{ ticksLabels[value - min] }}
</template>
computed: {
items() {
return this.ticksLabels.map((n, i) => ({
text: n,
value: this.min + i,
}));
},
},
от <v-select :items="items" v-model="range[0]"></v-select>
до <v-select :items="items" v-model="range[1]"></v-select>
<div v-for="{ audio, index } in audios"
computed: {
newTodoValid() {
return this.newTodo.length >= 10;
},
},
<input :class="newTodoValid ? 'valid' : 'not-valid'">
<button :disabled="!newTodoValid">
.valid {
border: 2px solid green;
}
.not-valid {
border: 2px solid red;
}