巧妙的使用v-model实现父子组件之间动态传值

  • Post author:
  • Post category:其他




巧妙的使用v-model实现父子组件之间动态传值

很多情况下我们都会遇到父子组件数据双向绑定的问题 既子组件中的数据发生变化 父组件的数据也要进行变化 父组件中的数据发生变化 子组件也要跟着变化 我们或许有很多方法实现 如$refs之类的 但总感觉这样的代码不够优雅 这个时候我们想到v-model

熟悉v-model的双向绑定原理 我们就可以用这一原理去实现父子组件之间动态传值了

原理如下:

  • 父组件通过v-model绑定一个变量传给子组件
  • 子组件通过props{value:{type:数据类型,defauult:默认值}} 接收
  • 子组件通过$emit(‘input’,传给父组件绑定变量的值) 去改变父组件中v-model绑定的变量


v-model

在内部为不同的输入元素使用不同的 property 并抛出不同的事件:

  • text 和 textarea 元素使用

    value

    property 和

    input

    事件;
  • checkbox 和 radio 使用

    checked

    property 和

    change

    事件;
  • select 字段将

    value

    作为 prop 并将

    change

    作为事件。



父组件

<template>
  <div class="home">
    <!-- 父组件 -->
    <p>父组件</p>
    <button @click="age++">age自增</button>
    <child v-model="age"></child>
    
  </div>
</template>

<script>
// @ is an alias to /src
import child from '@/components/HelloWorld.vue'

export default {
  name: 'Parent',
  components: {
    child
  },
  data() {
    return {
      age:1
    }
  },
}
</script>



子组件

<template>
<!-- 子组件 -->
  <div class="abc">
    <h3>子组件</h3>
    父组件传递过来的值是:{{value}}
    <button @click="$emit('input',5)">把子给父组件</button>
  </div>
</template>

<script>
export default {
  name:'child',
  props:{value:{type:Number,default:1}}
}
</script>

<style lang="less" scoped>
.abc{
  height: 200px;
  width: 300px;
  border: 1px solid red;
  margin: 0 auto;
}
</style>



效果

在这里插入图片描述

当在父组件中点击age自增的时候 数字会++ 当点击把子组件的值给父组件时值 会变为5 这样就实现了 不管是在那个组件中 数据发生变化 值都变化了

类似的博客参考:https://blog.csdn.net/qq_38128179/article/details/90370521



版权声明:本文为weixin_42343307原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。