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;
}
if (localStorage.getItem('mediaObjViewSeen') === true) {
Ключи и значения всегда строки
data: () => ({
view: localStorage.getItem('view') || 'CardsView',
// ...
}),
watch: {
view: val => localStorage.setItem('view', val),
},
data: () => ({
views: [
{
name: 'CardsView',
btnClass: 'btn-left',
img: '...',
},
{
name: 'MediaObjView',
btnClass: 'btn-right',
img: '...',
},
],
// ...
}),
<button
v-for="n in views"
:class="[ n.btnClass, view === n.name ? 'btn-active' : '' ]"
@click="view = n.name"
>
<img :src="n.img">
</button>
view
в TweetPreview
, используете его значение как имя компонента:<component
:is="view"
:tweet="tweet"
/>
computed: {
task() {
return new Proxy(this.value, {
set: (target, prop, value) => {
this.$emit('input', { ...target, [prop]: value });
return true;
},
});
},
},
v-model
соответствующих полей ввода):<input type="checkbox" v-model="task.done">
<button v-if="task.done" @click="$emit('delete')">delete</button>
<task-element
v-for="(n, i) in todos"
v-model="todos[i]"
@delete="todos.splice(i, 1)"
></task-element>
когда нажимаю повторно чтобы остановить музыку, она не останавливается
использую известный компонент vue-select он довольно удобный но у него нет того что мне нужно, а именно отображения опций в виде html-кода а не текста
data: () => ({
index: 0,
items: [
[ 'hello, world!!', 'fuck the world', 'fuck everything' ],
[ '69', '187', '666' ],
[ '!!!', '???', ':::' ],
[ '+++', '***', '///' ],
],
}),
<ul v-if="index < items.length" @click="index++">
<li v-for="n in items[index]">{{ n }}</li>
</ul>
<button v-else @click="index = 0">давай заново</button>
Меняет только value в input без изменения модели
v-model
слушает событие input, так что добавьте event.target.dispatchEvent(new Event('input'))
<div>
<span>{{ item.questions[index]['description'] }}</span>
<span v-if="item.questions[index]['answer'] == 2">Да</span>
<span v-if="item.questions[index]['answer'] == 1">Нет</span>
</div>
<div v-for="n in item.questions">
<span>{{ n.description }}</span>
<span>{{ n.answer | answer }}</span>
</div>
filters: {
answer: val => [ 'Нет', 'Да' ][val - 1],
...
v-scroll-text="{ selector: '.source-label', speed: 10 }"
scrollText(el, { value: { selector, speed } }) {
...