v-model实现父子组件通信

本文介绍了如何使用v-model在Vue.js中实现父子组件间的双向数据绑定。v-model通常用于表单元素的双向绑定,但在组件上使用时,它结合了属性和事件,监听输入并更新值。子组件需要定义value作为prop,通过$emit('input', 参数)将值传递给父组件,而父组件则通过v-model与子组件的value进行通信。" 106156057,7352657,Pytorch与numpy常用操作解析,"['深度学习', '神经网络', 'Pytorch']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如何实现两个组件之间的双向传递呢? 

即,在父组件中修改了值,子组件会立即更新。在子组件中修改了值,父组件中立即更新。

vue中有一个很神奇的东西叫 v-model,它可以完成我们的需求。

使用v-model过程中,父组件我们还是需要将子组件正常引入,只是传值方式改成了v-model

 

1、v-model一般用于表单的双向数据绑定

<template>
  <div>
    <input type="text"
           v-model="msg">
    <p>{{msg}}</p>
  </div>
</template>
<script>
export default {
  data () {
    return {
      msg: ''
    }
  }
}
</script>

2、v-model原理 

由此看出,v-model是v-bindv-on:input的结合,即监听了表单的input事件,然后修改value属性对应的值

<template>
  <div>
    <input type="text"
           :value="msg"
           @input="bind">
    <p>{{msg}}</p>
  </div>
</template>
<script>
export default {
  data () {
    return {
      msg: ''
    }
  },
  methods: {
    bind () {
      this.msg = event.target.value
    }
  }
}
</script>

3、v-model除了在输入表单上可以使用之外,在组件上也可以使用,以实现父子组件的双向数据绑定

// -------------------------------父组件
<template>
  <div>
    <!-- 在父组件中用v-model相当于,v-bind绑定了value,以及执行了v-on:input事件 -->
    <child v-model="flag"></child>
    <div>{{flag}}</div>
  </div>
</template>
<script>
export default {
  data () {
    return {
      flag: ''
    }
  },
  components: {
    child
  }
}
</script>

// -------------------------------子组件
<template>
  <div>
      <div class="btn" @click="confirm">确定</div>
  </div>
</template>
<script>
export default {
// 用props接收父组件传递的value值,从而实现双向数据绑定
  props: {
    value: {
      type: Boolean,
      default: true
    }
  },
  methods: {
    // 通过$emit触发父组件的input事件,并将第二个参数作为值传递给父组件
    confirm () {
      this.$emit('input', false)
    }
  }
}
</script>

最后,父组件中的flag默认为true,点击了子组件中的“确定”后,子组件将false传递给了父组件的flag

 

v-model在内部使用不同的属性为不同的输入元素抛出不同的事件:

text和textarea使用value属性和input事件;
checkbox和radio使用checked属性和change事件;
select字段将value作为prop并将change作为事件。


使用v-model双向通信的方法总结:

子组件设value为props属性,并且不主动改变value的值
子组件通过this.$emit(‘input’,‘参数’)将参数的值传给父组件
父组件通过v-model="flag"绑定一个本地的变量,即可实现子组件value与父组件双向通信(前提:传给父组件的值一定是你想赋给value的)

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值