zoukankan      html  css  js  c++  java
  • 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
        }
      },
     
  • 相关阅读:
    unix网络编程源码编译问题
    ubuntu15.04下安装docker
    hexo博客的相关配置
    hexo的jacman主题配置
    使用github和hexo搭建静态博客
    操作系统简单认识
    github for windows安装以及教程
    编译原理第五单元习题
    python3入门之列表和元组
    Python3入门之软件安装
  • 原文地址:https://www.cnblogs.com/zhuangdd/p/14939467.html
Copyright © 2011-2022 走看看