У меня есть этот простой компонент, в котором я пытаюсь привязать реквизиты в обе стороны, но он работает только в одну сторону. Когда я меняю текст в своих полях ввода, он показывает «Начальное свойство 1» как значение myprop1, хотя я изменил ввод. Что могло быть не так?
Мой компонент
Vue.component('simple-input', {
template: `
<div>
<input type = "text" :myprop1 = "myprop1" :value = "myprop1" @input = "$emit('input', $event.target.value)">
<input type = "text" :myprop2 = "myprop2" :value = "myprop2" @input = "$emit('input', $event.target.value)">
</div>
`,
props: ['myprop1', 'myprop2']
});
main.js
new Vue({
el: '#root',
data: {
myprop1: 'Initial property 1',
myprop2: 'Initial property 2',
},
methods: {
showMe()
{
alert('prop1 - ' + this.myprop1);
alert('prop2 - ' + this.myprop2);
this.myprop1 = 'new value';
this.myprop2 = 'new value';
}
}
});
HTML
<simple-input :myprop1 = "myprop1" :myprop2 = "myprop2"></simple-input>
<button @click = "showMe">Show me!</button>



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Есть 2 основные проблемы:
Ваш дочерний компонент генерирует событие input для обоих входов. Вам нужно генерировать разные события, чтобы вы могли различать их в родительском компоненте. Также:
:myprop1 = "myprop1" ничего не делает с входным элементом, такого свойства / атрибута myprop1 на входах нет.myprop - ужасное имя, используйте вместо него value.Vue.component('simple-input', {
template: `
<div>
<input type = "text" :value = "value1" @input = "$emit('update:value1', $event.target.value)">
<input type = "text" :value = "value2" @input = "$emit('update:value2', $event.target.value)">
</div>
`,
props: ['value1', 'value2'],
});
В родительском компоненте вам необходимо прослушивать события update:value1 и update:value2, чтобы вы могли получать новые значения от дочернего.
<simple-input
:value1 = "value1"
:value2 = "value2"
@update:value1 = "value1 = $event"
@update:value2 = "value2 = $event"
></simple-input>
Фактически, поскольку мы использовали соглашение об именах update:prop для события, мы можем использовать модификатор sync, чтобы сделать привязку двусторонней. Так становится просто:
<simple-input
:value1.sync = "value1"
:value2.sync = "value2"
></simple-input>
потому что я не знаю, как, если у меня есть 2 реквизита - по одному для каждого входа