啥是双向绑定,两种方式实现两个简单双向绑定
看代码
<input type="text"><script>let ipt = document.querySelector("input")let str = "请输入"ipt.value = stript.addEventListener("change", (e) => {str = e.target.value})</script>
以上代码写前端的都认识,input里面的value值会被赋值给str变量,但是当str变量本身发生变化的时候,input的value却不会产生变化,因为我们的addEventListener是单纯对input标签进行的监听,而没有函数对str这个值进行监听,当然我们可以使用以下的方法实现str和input的同步
<input type="text"><button>改变str的值</button><script>let ipt = document.querySelector("input")let str = "请输入"ipt.value = stript.addEventListener("change", (e) => {str = e.target.value})//改变str的方法let but = document.querySelector("button")but.addEventListener("click", () => {str = "改变str"ipt.value = str})</script>
但是我们可以注意到这种写法中我们还要点击一个button,我们想让这个str变量直接动态改变,input不用其他操作自动改变其value,由此我们就引入了双向绑定的概念,而其中的重点在于增样去监听变量的set方法,如str=“hahha”
以下是两种简单的双向绑定事件
第一种是利用defineProperty
<body><input type="text" class="ipt"><script>let ipt = document.querySelector(".ipt")let obj1 = {} //代理者let obj2 = { iptVal: '其输入' } //被代理者Reflect.defineProperty(obj1, "iptVal", {get () {// 试图获取obj1.iptVal的值时,会返回obj2.iptValreturn obj2.iptVal},set (newVal) {// 当给obj1.iptVal设置新值的时候,obj2.iptVal的值也会更新,同时input的value也会更新obj2.iptVal = newValipt.value = obj1.iptVal}})ipt.value = obj1.iptValipt.addEventListener("change", (e) => {obj1.iptVal = e.target.valueconsole.log(obj1);})</script>
</body>
我们可以通过浏览器的控制台去设置新值去看我们的input中的value会不会直接改变
第二种是Proxy的写法
<body><input type="text" class="ipt"><script>let ipt = document.querySelector(".ipt")let obj1 = { iptVal: "请输入" }let obj2 = new Proxy(obj1, {get (target, index) {return target[index]},set (target, index, value) {target[index] = valueipt.value = value}})ipt.value = obj2.iptValipt.addEventListener("change", (e) => {obj2.iptVal = e.target.value})</script>
</body>
两种写法其实有两个值,一个是和input绑定的监听者,另外一个是提供数据的被监听者,两者能够实现双向绑定的原因还是在于set方法,这个方法能在监听变量的赋值行为,并让我们做出dom操作,这才是最主要的。
今天想写文章,实在不知道写什么才写的这个。
啥是双向绑定,两种方式实现两个简单双向绑定相关推荐
- java的两种方式_java 两种方式的区别?
成员函数方式 package cn.com.ch09; class FatherTest{ public void pet(String str){ System.out.println(str); ...
- 【SpringBoot】项目实现热部署的两种方式
前言 spring boot : 2.0.0.RELEASE maven eclipse 另外还需清楚什么是热部署,以及为什么要热部署. SpringBoot项目中实现热部署的两种方式,使得部署变得异 ...
- java jobdetail_Spring创建JobDetail的两种方式
一.Spring创建JobDetail的两种方式 定时任务两种方式,Spring很好的封装使用Quartz的细节,第一种方式是利用SPring封装的Quartz类进行特定方法的实现,第二种是通过透明的 ...
- SilkTest 对 Excel 表操作的两种方式
SilkTest 对 Excel 表操作的两种方式 这两种方式都是对 SilkTest 运用的最基础的东西,我写得也比较简单.国内这方面的资料实在太少,对初学者可能有帮助. 方式一 : Data D ...
- 【JetPack】视图绑定 ( ViewBinding ) 各种应用 ( 视图绑定两种方式 | Activity 布局 | 对话框布局 | 自定义组件布局 | RecyclerView 列表布局 )
文章目录 I . 视图绑定 ( ViewBinding ) 界面的两种方式 II . Activity 界面中 应用 视图绑定 ( ViewBinding ) III . Dialog 对话框界面中 ...
- java两种绑定方式_Javascript绑定事件的两种方式的区别
命名函数 function check(){ //code } 匿名函数 window.onload = function(){ //先获取元素对象,再绑定事件,绑定的是匿名函数不可重用 var bt ...
- SpringBoot配置绑定的两种方式
SpringBoot配置绑定的两种方式 演示文件 bean public class Student {private String name;private Integer age;public S ...
- MVVM处理TreeView的SelectedItem的绑定的两种方式
TreeView的SelectedItem不支持MVVM绑定: 因为它是只读的. 有时候我们就需要对它进行绑定 最新经过测试的解决方案(附加属性的方式) 参考:https://stackoverflo ...
- react 调用 html5,React-Native Webview 和H5交互的两种方式
React-Native WebView 和H5交互有两种方式: 方式1:RN Webview 向H5注入JS 此方式可作为Webview向H5端传递数据. RN Webview 有以下属性,可以注入 ...
最新文章
- dubbo源码深度解析_Spring源码深度解析:手把手教你搭建Spring开发环境
- Android 四大组件之 Activity
- 高斯拉普拉斯算子(Laplace of Gaussian)
- Embedded Android 协同翻译
- python新手如何找工作最有效_Python好学吗?要学多久?
- 和 Eclipse 并肩十年后,我终于「投敌」IDEA 了
- 设计模式 - Visitor 模式(访问者模式)
- linux 环境变量详解,Linux 环境变量详解及实例
- Windows7 64位系统搭建Cocos2d-x 2.2.1最新版以及Android交叉编译环境(具体教程)
- 深入 Java 调试体系: 第 1 部分,JPDA 体系概览
- Linux里sra文件是什么,生信软件 | Sratools (操作SRA文件)
- 【日语】动词的九种变形
- 无线打印机服务器属性,为什么我的打印机能在打印机
- ShardingSphere实践(1)——ShardingSphere介绍
- C语言入门知识1(零基础新手适用)
- TypeError: this.getOptions is not a function at Object.lessLoader
- 电信联通共享检测技术及防封杀
- 如何生成火焰图以及火焰图基本介绍
- 一心多用多线程-阻塞队列(7)-CyclicBarrier
- 使用elasticSearch搭建本地以图搜图服务
热门文章
- 1到100的平方和 java_力扣:平方数之和——Java、Python
- Redis——Lettuce连接redis集群
- mysql 慢查询日志位置_mysql慢查询日志
- 数据库的乐观锁和悲观锁
- 17年创业失败欠了10万,18年还清,19年在原公司做到主管,是继续创业还是?
- 2021年青海高考一分一段成绩查询,2021青海高考一分一段表汇总(文理科):青海高考位次查询2021...
- 网络红人公交美眉屡遭骚扰
- 南阳理工学院计算机二级成绩查询,南阳理工学院2012年上半年全国计算机等级考试报名通知...
- 百度网页分享工具下线
- QQ FOR LINUX 老是掉线