одно из вложенных свойств через v-model привязывается к чекбоксу
<...>
при попытке прописать v-if с использованием этого свойства, при его изменении ничего в DOM не меняется
v-model
, при первом изменении состояния чекбокса. А vue, как известно, не может обнаружить добавление свойства объекта. Так что это свойство, чтобы оно стало реактивным, должно изначально присутствовать в объекте, и, раз оно используется для задания состояния чекбоска, то пусть дефолтным значением будет false
.v-model
добавляет отсутствующие свойства как реактивные. data: () => ({
activeClass: '',
...
}),
<p :class="activeClass"></p>
data: () => ({
classes: [ 'какой-то класс', 'ещё класс', ... ],
...
}),
<p
v-for="n in classes"
@mouseover="activeClass = n"
@mouseout="activeClass = ''"
>
groupedItems() {
return this.items.reduce((acc, n) => {
for (const k in n) {
acc[k] = acc[k] || {};
acc[k][n[k]] = (acc[k][n[k]] || 0) + 1;
}
return acc;
}, {});
}
<div v-for="(group, groupName) in groupedItems">
<h3>{{ groupName }}:</h3>
<div v-for="(value, key) in group">{{ key }} ({{ value }})</div>
</div>
methods: {
onClick1() {
alert('button1 clicked');
},
onClick2() {
this.$refs.button.click();
},
},
<button @click="onClick1" ref="button">button1: click me</button>
<button @click="onClick2">button2: click button1</button>
data: () => ({
active: null,
items: [
{ text: 'hello, world!!', numSpans: 3, classes: [] },
{ text: 'fuck the world', numSpans: 6, classes: [ 'yyy' ] },
{ text: 'fuck everything', numSpans: 0, classes: [ 'zzz' ] },
],
}),
<ul>
<li v-for="(n, i) in items" :class="{ active: active === i }">
<a :class="[ 'xxx', ...n.classes ]" @click="active = i">
{{ n.text }}
<span v-for="s in n.numSpans"></span>
</a>
</li>
</ul>
.active {
background: red;
}
Name должна падать в массив labels
watch: {
choosenMetabolit(val) {
this.anMetProfData.labels.push(val.name);
},
},
а result_1, 2 и 3 имели путь datasets[0, 1 или 2]. data
watch: {
choosenMetabolit(val) {
const data = this.anMetProfData;
const sets = data.datasets;
data.labels.push(val.name);
sets[0].data.push(val.result_1);
sets[1].data.push(val.result_2);
sets[2].data.push(val.result_3);
},
},
Вот этот атрибут v-masonry мне нужно добавлять и убирать по условию.
Дублировать разметку через v-if v-else неудобно, т.к. блок большой.
По сути у меня два компонента получилось upload-files и edit-file . И надо теперь наладить между ними взаимодействие.
file['selected'] = true
this.$set(file, 'selected', true)
data: () => ({
show: false
})
<button @click="show = !show">{{ show ? 'hide' : 'show' }}</button>
<my-component v-if="show"></my-component>
data: () => ({
items: []
}),
methods: {
add() {
this.items.push(...);
}
}
<button @click="add">add</button>
<my-component v-for="n in items"></my-component>
const fileIndex = this.files.indexOf(fileInArr);
this.$set(this.files, fileIndex, response.data);
data: () => ({
value: '',
error: false
}),
methods: {
checkValue() {
this.error = в зависимости от this.value;
}
}
<input v-model="value" :class="{ error }" @blur="checkValue">
<span v-show="error">ошибка</span>
.error {
border-color: red;
}