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
        }
      },
     
  • 相关阅读:
    elementui表单输入框部分校验--判断
    vue学习如何引入js,封装操作localStorage本地储存的方法
    vue组件传值 递增次数传递bug修复
    vue深度监听之手机格式344
    vue-------滑动验证
    vue get/post请求如何携带cookie的问题
    elementui的dialog组件踩坑
    WebStorm License Activation (WebStorm许可证激活)
    input 标签实现带提示文字的输入框
    隐藏 input 标签的边框
  • 原文地址:https://www.cnblogs.com/zhuangdd/p/14939467.html
Copyright © 2011-2022 走看看