Javascript

VUE 自定义组件的双向数据绑定 和替代钩子

本文主要是介绍VUE 自定义组件的双向数据绑定 和替代钩子,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

 

父组件 

   <task-checkbox v-model="checked"></task-checkbox>

 

 

子组件

1、定义model

  // 步骤一、model
  model: {
    prop: 'value', //(value取名为checked)接收到的双向绑定值 如果不写model 默认为value
    event: 'update' //给父组件传值的方法名
  },

 

2、// 步骤二、props接收值

 // 步骤二、props接收值
  props: {
    checked: {
      // type: String,
      default() {
        return '123'
      },
      require: true
    }
  },

 

3、必须用计算属性或者data对接收到的值做处理

 
  computed: {
    _checked: {
      get() {
        return this.checked
      },
      set(val) {
        this.$emit('update', val)
      }
    }
  },

 

4、可以加一些方法,注意不要和update重名就行

 

子组件代码如下:

<template>
  <div>
    <input type="checkbox" v-model="_checked" id="checkAll" />
  </div>
</template>

<script>
export default {
  name: 'task-checkbox',

  // 步骤一、model
  model: {
    prop: 'checked', //(value取名为checked)接收到的双向绑定值 如果不写model 默认为value
    event: 'update' //给父组件传值的方法名
  },

  // 步骤二、props接收值
  props: {
    checked: {
      // type: String,
      default() {
        return '123'
      },
      require: true
    }
  },

  // 必须用计算属性或者data对接收到的值做处理
  computed: {
    _checked: {
      get() {
        return this.checked
      },
      set(val) {
        this.$emit('update', val)
      }
    }
  },

  methods: {
    checkAll() {
      this.$emit('all')
    }
  }
}
</script>

<style></style>
View Code

 

其实不用组件双向数据绑定呀~

用ref 也可以实现相似的功能

父组件这么写:

html

    <task-checkbox @click.native="all" ref="zxd"></task-checkbox>

js:

  all() {
      console.log('点到了')
      let val = this.$refs.zxd.rez
      console.log(this.$refs.zxd, val)
      this.checked = val
    },

 

 

子组件:data+html

    <input type="checkbox" v-model="rez" id="checkAll" />

 data() {     return {       rez: true     }   },
 

 

这篇关于VUE 自定义组件的双向数据绑定 和替代钩子的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!