• v-model和 .sync


    1、v-model的双向数据绑定其实是一个语法糖,类似于,给子组件传入一个value值,并且监听子组件的input事件,在这个事件里将子组件传过来的新值赋值给父组件的value

    <Input v-model="username">
    //同于下:
    <Input :value="username"  @input="username=$event">
    //在子组件里面需要接收value属性,并绑定input事件
    //子组件
     <input :value="value" @input="onInput">
    //props选项:
      props: {
         value: {
           type: String,
           default: ""
         }
       },
      //methods选项
       methods: {
         onInput(e) {
           // 派发事件,传递最新的值
           this.$emit("input", e.target.value);
         }
       }

    注:v-model的语法糖的默认传递的属性是value,默认监听的事件是input事件

    当然,默认属性和默认事件可以在子组件中自定义,如下:

    //Input.vue子组件中有一个model选项可以用来自定义v-model的默认属性和事件(vue2.4以上的版本中新加的)
    {
        model:{
            prop:'checked',  //传递的属性
            event:'change'   //监听的事件
        }
        
    }    

    这样在子组件中,就可以结束checked属性值,和绑定change事件了

    2、.sync修饰符和v-model实现的效果是相像的,只是.sync的绑定事件是不变的,也不能自定义的,必须是update:属性名;但是传入的属性是可以随意定义的,只要和事件update后面的参数保持一致就行了

    <Input :aaa.sync="username">
    //如同下
    <Input :aaa.sync="username" @update:aaa="username = $event">
    //这样也能实现数据的双向绑定

    此时子组件中,子组件绑定的事件的$emit的事件也必须是update:aaa

    this.$emit("update:aaa,false);

    这样在父组件中才能监听到子组件的变化

    总结一下:v-model是比较灵活的,它有默认的属性和事件,也可以自定义指定,比较方便;相比下,sync的事件就是固定不变的了,无法自定义

  • 相关阅读:
    Heapsort 堆排序算法详解(Java实现)
    GIve Me A Welcome Hug!
    linux系统救援模式拯救mv libc.so.6文件后无法使用命令的悲剧
    RabbitMQ集群部署
    使用Xshell通过堡垒机登录服务器
    dubbo + zookeeper环境部署
    zookeeper集群部署
    zabbix-3.0.1 添加微信报警
    zabbix-3.0.1结合grafana绘图
    Centos7.2安装zabbix3.0.1简要
  • 原文地址:https://www.cnblogs.com/gopark/p/11735501.html
Copyright © 2020-2023  润新知