Vue2.x父组件与子组件之间的双向绑定

最近在研究如何写一套基于Vue2.x的UI组件给自己用,提升一点BIG,在制作含有input的组件遇到一个问题:不知怎样才能把子组件中input与调用者(父组件)的数据实现双向绑定,想过使用Vuex,但观摩了一下其他优秀的UI框架,发现使用Vuex会给其他使用者造成麻烦,于是决心找到寻求解决方法,在参考了几篇大牛们文章后,终于找到。


在这将解决方案贴出,希望能帮助到和我一样初次接触Vue这个框架的同行们。


子组件的代码逻辑

<template>
  <div class="ne-ipt">
    <input type="text" v-model="currentValue">
  </div>
</template>

<style lang="less" scoped>
  @import "../../assets/styles/form/form.less";
</style>

<script>
  export default {
    name: 'NeIpt',
    props: {
      // 接收一个由父级组件传递过来的值
      value: {
        type: String,
        default: function () {
          return ''
        }
      }
    },
    computed:{
      currentValue: {
        // 动态计算currentValue的值
        get:function() {
          return this.value; // 将props中的value赋值给currentValue
        },
        set:function(val) {
          this.$emit('input', val); // 通过$emit触发父组件
        }
      }
    }
  }
</script>

父组件代码逻辑

<template>
  <div id="button-index">
    <ne-ipt placeholder="姓名" v-model="test"></ne-ipt>
  </div>
</template>
<style>
</style>
<script>
  import NeIpt from './NeIpt'
  export default {
    name: 'form-index',
    data () {
      return {
        test: ''
      }
    },
    components: {
      NeIpt
    }
  }
</script>

在修改子组件的currentValue的时候其实通过$emit触发input事件将值传递给调用者的v-model,从而实现双向绑定。

以上是我个人的理解,如有不对还请各位大大批评指正。

参考资料:

【1】vue2.0 组件和v-model——一步小僧

【2】Vue2.0组件间数据传递——家光smile

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值