首页 > 其他分享 >非表单组件实现双向绑定的小技巧-- v-model 代替 .sync

非表单组件实现双向绑定的小技巧-- v-model 代替 .sync

时间:2022-10-22 11:24:30浏览次数:76  
标签:-- 绑定 sync value 表单 组件 input model

简介

一般地,双向绑定多用于表单这类输入组件,但在非表单组件上使用双向绑定的需求也很常见,比如具有单选性质的菜单、标签页等组件,通过双向绑定可以更方便地获取和修改激活项。

之前常用的方法是通过 .sync 修饰符绑定 value 属性,并在组件内部触发 emit('update:value',newValue) 的形式,但还是不够优雅。

最近看 element 源码时发现一个小技巧,value 作为 prop 不变,但触发的自定义事件换成 input,此时就可以通过 v-model 指令代替 .sync 修饰符。

简单说明

v-model 原本是针对表单中输入组件的语法糖,根据输入组件的不同,其内部会触发相应的自定义事件,比如文本框组件就会触发 input 事件。而这里是在非表单组件内部触发 input 事件,也能搭配 v-model 实现双向绑定,说明 v-model 指令被编译成 :value="yourValue" @input=value => yourValue = value" 时,并不需要 100% 判定这是一个表单输入组件,否则的话这里的编译应该是无法通过的。

查看相关源码,发现若是在组件上使用 v-model 指令,编译时确实是直接将其编译为一个名为 value 的 prop 和一个 input 事件。

因此,在非表单输入组件内部使用 input 作为自定义事件,确实是有效的。

当然,还是建议只在绑定简单的数据类型时使用,比如数字、字符串等类型,因为它们很少会有非“整值替换”的变化;复杂的对象还是通过 v-bind + @event 显示声明的方式绑定,因为对象大多只是替换其中的某个属性,甚至是嵌套对象的属性,通过事件自定义修改会更方便。

具体的源码分析可以查看以下链接:
(vue2):https://blog.csdn.net/weixin_43294560/article/details/122585166
(vue3):https://blog.csdn.net/fegus/article/details/125757003

本地查看 v-model 源码:
vue2 中位于 node_modules/vue/dist/vue.js
vue3 应该是 node_modules/vue/dist/vue.global.js

标签:--,绑定,sync,value,表单,组件,input,model
From: https://www.cnblogs.com/cjc-0313/p/16815638.html

相关文章

  • 'gbk' codec can't encode character '\xa0' XXX解决方法
    在运行py文件时,出现“UnicodeEncodeError:‘gbk’codeccan’tencodecharacter‘\xa0’inpositionXXX”,让人摸不着头脑。注意这三个方面,一般都能解决。1.程序......
  • 正整数分解质因数
    #include<stdio.h>intmain(){ intm=90; inti; printf("%d=",m); for(i=2;i<=m;i++){ while(m%i==0){ printf("%d",i); /*加*第一种方法 if(m!=i......
  • 比较CPU和GPU中的矩阵计算
    GPU计算与CPU相比能够快多少?在本文中,我将使用Python和PyTorch线性变换函数对其进行测试。以下是测试机配置:CPU:英特尔i76700k(4c/8t)GPU:RTX3070TI(6,144个......
  • 判断2~n之间的所有完全数
    1defwqs(n):2b=03foriinrange(1,n):4ifn%i==0:5b=b+i6ifb==n:7return18else:9r......
  • CUDA安装
    下载安装CUDAhttps://developer.nvidia.cn/cuda-downloads注意先看一下cudnn支持到哪个版本了选自定义安装,在CUDA下拉里取消勾选VisualStudio…在Drivercomponen......
  • 原型、原型链、优点////作用域、作用域链////闭包、应用场景、优点、存在的问题
    一、原型、原型链、优点1、原型:在javascript中,函数可以有属性。每个函数都有一个特殊的属性叫做原型(prototype)2、原型链:JavaScript常被描述为一种基于原型的语言(prototy......
  • SQL通用语法和SQL分类
    SQL通用语法1、SQL语句可以单行或多行书写,以分号结尾2、可以使用空格和缩进来增强语句的可读性3、MySQL数据库的SQL语句不区分大小写,关键字建议使用大写4、3中注释......
  • 熟悉编程语言
    1.熟悉编程语言查阅网站(TIOBEIndex-TIOBE),复制得到信息。Oct2022Oct2021ChangeProgrammingLanguageRatingsChange11 Python17.08%+5.81%22 C......
  • 补题记录——Oct. Training 1-图论、集合哈希
    H-BoboniuWalksonGraphhttps://codeforces.com/problemset/problem/1394/B题意给n个点m条有向边,么个点的出度不超过k(k<=9),每条边都有一个边权在(\(1<=w<=m\))且每条边......
  • 江苏工匠杯unseping(反序列化+Linux命令执行{$(printf '\154\163')})
    <?phphighlight_file(__FILE__);classease{private$method;private$args;function__construct($method,$args){$this->method=$m......