Общее значение v-модели между дочерним и родительским

У меня есть компонент, который разделяет v-model то же, что и родительский компонент. Код выглядит следующим образом:

Vue.component('greeting', {
  template: '<input type = "text" :name = "name" v-on:input = "updateSearch($event.target.value)"> ' ,
  props: ['name'],
  methods: {
    updateSearch: function(value) {
      this.$emit('input', value);
    }
  }
});


const app = new Vue({
  el: '#app',
  data: {
    name: ''
  }
});
<script src = "https://unpkg.com/[email protected]/dist/vue.js"></script>
<div id = "app">
  
  Child: <greeting v-model = "name"></greeting>
  <br><br><br>
  Main: <input type = "text" v-model = "name" placeholder = "" />

</div>

Я хочу обновить оба поля ввода, если пользователь вводит текст в любом из них. Любые предложения будут полезны.

Если вы передаете ссылку, например объект, в качестве опоры, вы можете привязать свойство этого объекта как к своему родителю, так и к ребенку.

Chris Li 15.03.2019 18:09

Извиняюсь. Я не понял тебя. не могли бы вы привести пример?

Pradeepb 16.03.2019 09:11

не уверен, что это то, что вам нужно jsfiddle.net/dumz8vxf

Chris Li 16.03.2019 18:56

@КрисЛи Да. точно. Большое спасибо. Пожалуйста, опубликуйте это как ответ.

Pradeepb 16.03.2019 22:28
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
4
300
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Обычно это плохая практика изменения реквизитов внутри дочернего компонента. В этом случае вы можете создать две разные переменные и обновить другую, когда какая-то из них изменит ее значение (через события и реквизиты).

Таким образом, компонент greeting будет генерировать какое-то событие, которое вы поймаете внутри основного компонента и обновите основной компонент name

С другой стороны, основной компонент передаст свойство greeting, которое будет реагировать на изменения внутри основного компонента и будет обновлять переменную name внутри данных приветствия.

Если вы получаете больше таких случаев, подумайте об использовании векс.

Я думаю, что вы ищете .sync модификатор для событий в Vue.js 2.3.0+.

Пример реализации можно найти в моей статье здесь.

Ответ принят как подходящий

Если вы передаете ссылку, например объект, в качестве опоры, вы можете привязать свойство этого объекта как к своему родителю, так и к ребенку.

Vue.component('greeting', {
  template: '<input type = "text" v-model = "name.value" />' ,
  props: ['name']
});


const app = new Vue({
  el: '#app',
  data: {
    name: { value: '' }
  }
});
<script src = "https://unpkg.com/[email protected]/dist/vue.js"></script>
<div id = "app">
  
  Child: <greeting v-bind:name = "name"></greeting>
  <br><br><br>
  Main: <input type = "text" v-model = "name.value" placeholder = "" />

</div>

Другие вопросы по теме