vue实现子组件与父组件双向数据流,避免直接修改值而导致的错误

这里以input做示例:

父组件代码:
<template>
  <div>
    <inputDIY v-model="inputSearch"></inputDIY>
  </div>
</template>

<script>
import inputDIY from './input.vue'
export default {
  data() {
    return {
      inputSearch:''
    }
  },
  components:{
    inputDIY
  }
}
</script>


<style lang="scss" scoped>

</style>

子组件代码:
<template>
  <div>
    <input type="text" :value="nativeInputValue" @input="inputChange">
  </div>
</template>

<script>
export default {
  computed: {
    nativeInputValue(){
      return this.value === null || this.value === undefined ? '' : this.value
    }
  },
  props:{
    value: [String, Number]
  },
  methods: {
    inputChange(event){
      this.$emit('input', event.target.value)
    }
  }
}
</script>

<style lang="scss" scoped>

</style>

这里做一下总结:我们从父组件通过v-model双向绑定值到子组件(inputDIY)中,那我们为什么不直接在子组件v-model双向绑定父组件传输过来的值呢?这是因为所有的 prop 都使得其父子 prop 之间形成了一个单向下行绑定:父级 prop 的更新会向下流动到子组件中,但是反过来则不行。这样会防止从子组件意外改变父级组件的状态,从而导致你的应用的数据流向难以理解。总之就是子组件不能直接修改父组件中的值,但是可以通过自定义事件告诉父组件,这个值是否要进行更新,这里使用computed计算属性就可以变向的实现子组件与父组件之间的双向数据流

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 什么是组件? 组件 (Component) 是 Vue.js 最强大的功能之一。组件可以扩展 HTML 元素,封装...
    youins阅读 13,165评论 0 13
  • 前言 您将在本文当中了解到,往网页中添加数据,从传统的dom操作过渡到数据层操作,实现同一个目标,两种不同的方式....
    itclanCoder阅读 26,099评论 1 12
  • 这篇笔记主要包含 Vue 2 不同于 Vue 1 或者特有的内容,还有我对于 Vue 1.0 印象不深的内容。关于...
    云之外阅读 10,463评论 0 29
  • vue概述 在官方文档中,有一句话对Vue的定位说的很明确:Vue.js 的核心是一个允许采用简洁的模板语法来声明...
    li4065阅读 12,018评论 0 25
  • 此文基于官方文档,里面部分例子有改动,加上了一些自己的理解 什么是组件? 组件(Component)是 Vue.j...
    陆志均阅读 9,240评论 5 14