简体   繁体   English

VueJS 将 v-model 属性从子级发送到父级

[英]VueJS sending v-model property from child to parent

Let's say I have a Vue component like this one:假设我有一个像这样的 Vue 组件:

 Vue.component('child-comp',{
    props:['name', 'val'],
    data: function(){
       return {
           picked: ''
       }
    },
    template: '<div><input type="radio" :name="name" :value="val" v-model="picked"><slot></slot></div>'
});

And The Parent vue instance:和父 vue 实例:

new Vue({
  el: '#app',
  data: {
    message: 'Hello'
  }
});

And in the HTML:在 HTML 中:

<div id="app">
  <child-comp name="fruits" val="apple">Apple</child-comp>
  <child-comp name="fruits" val="banana">Banana</child-comp>
  <child-comp name="fruits" val="cherry">Cherry</child-comp>
  <p>{{ picked }}</p> <!-- this throws an error -->
</div>

How can I pass the v-model property picked from the child component to the root instance.如何将从子组件中picked的 v-model 属性传递给根实例。 Only way I know of is $emit ting an event from the child component and later capturing the passed data in root instance.我知道的唯一方法是$emit来自子组件的事件,然后在根实例中捕获传递的数据。 But as you can see, to access a simple property, triggering an event is overkill.但正如您所见,要访问一个简单的属性,触发一个事件是多余的。 How can I access {{ picked }} within <p>{{ picked }}</p>如何在<p>{{ picked }}</p>中访问{{ picked }}

If your child-comp is an input component you could use two-way props.如果您的child-comp是一个输入组件,您可以使用双向道具。 These work similar to v-model but you can use them with your custom components.这些工作类似于v-model ,但您可以将它们与您的自定义组件一起使用。

<custom-input
  :value="something"
  @input="value => { something = value }">
</custom-input>

You can find out more about this here and there .你可以在这里那里找到更多关于这个的信息。 See this thread also.另请参阅线程。 Good luck!祝你好运!

That's easy:这很容易:

new Vue({
  el: '#app',
  data: {
    message: 'Hello',
   picked: 'apple'
  }
});

And in child :在孩子中:

Vue.component('child-comp',{
    props:['name'],
    template: '<div><input type="radio" :name="name" v-model="picked"><slot></slot></div>'
});

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM