input? в общем примерно после 2-3 введенного символа, последний символ начинает мигать - это означает что он не попал в modelValue и не попадёт туда, пока не появится еще один символ, который теперь будет мигать вместо него. В итоге получаем что каждый последний символ мигает, а модель всегда отстаёт на 1 символ =(
покажи код
в общем вроде починил. заменил keydown на input и заработало как надо, но есть вторая проблема, которую непонятно как решать. Есть компонент input у которого <input :value="modelValue" @input="$emit('update:modelValue', $event.target.value)" /> Есть компонент text-field, который использует этот v-input <v-input v-model="modelValue"/> И есть форма, которая использует text-field <text-field v-model="login"/> почему-то login работает только в одну сторону, то есть значение login пробрасывается до v-input, но вот в обратную сторону значение пробрасывается только до text-field, а до login не доходит
покажи код text-field и v-input
login.vue v-text-field( label="Логин" v-model="login" filled ).primary-color text-field.vue .v-text-field v-input( :label="label" v-model="modelValue" ) vinput.vue input( type="text" :id="elemId" :value="modelValue" @input="$emit('update:modelValue', $event.target.value)" )
что такое modelValue в текст филде?
modelValue это по идее связь с v-model.https://vuejs.org/guide/extras/render-function.html#v-model
покажи код компонента скрином
ты записываешь в v-model modelValue, который тебе приходит пропсом, так делать нельзя нужно передавать пропс в компонент, а наверх эмитить новое значение, как ты делаешь в инпуте ты можешь использовать v-model, но для этого тебе нужно написать компьютед-обертку (поищи по чату get/set) для пропса, чтобы при записи не мутировался пропс, а эмитилось значение
да, слышал про такой подходт (get/set), но почему на 1 уровень это работает, а на 2 нет. я думал что механика должна быть одинаковая на всех уровнях
потому что ты пытаешься мутировать пропс
там обсуждалась мысль, что может стоит использовать computed, для этой проблемы. Мне не кажется эта идея совсем бредовой, как думаешь?
так я тебе и написал про компьютед :/
а computed куда вешать? на login? а как? не совсем понятно
https://vuejs.org/guide/essentials/computed.html#writable-computed
это да, получается что modelValue в компоненте text-field должен быть вычисляемым? то есть нужно еще одно свойство, которое будет читать modelValue?
modelValue тут ни при чем, он как приходил из пропсов, так и будет приходить а твой новый computed будет просто обращаться к нему в геттере, чтобы взять его значение
а новый это какой? то есть получается мне не нужно передавать modelValue из text-field в input, а передавать какое-то другое свойство, которое будет вычисляться на основе modelValue в text-field?
>а новый это какой? который, внезапно, ты создашь сам >а передавать какое-то другое свойство тебе нужно в v-model использовать computed с сеттером, а не modelValue
const value = computed({ get() { return props.modelValue }, set(newValue) { props.modelValue = newValue } }) v-input( :label="label" v-model="value" ) так? ругается что нельзя изменять readonly свойства
в сеттере нужно эмитить update:modelValue с новым значением
Обсуждают сегодня