proxy代理简单实现一下vue的双向绑定

<input type="text" v-model="title" />
<input type="text" v-model="title" />
<h3 v-bind="title"></h3>
比较low的方式
'use strict'
			let inputs = document.querySelectorAll('input')
			let h3s = document.querySelector('h3')
			let values = ''
			inputs[0].addEventListener('input', function () {
				values = inputs[0].value
				inputs[1].value = values
				h3s.textContent = values
			})
			inputs[1].addEventListener('input', function () {
				values = inputs[1].value
				inputs[0].value = values
				h3s.textContent = values
			})

双向绑定

proxy代理的方式
'use strict'
			//保存title数据
			let val = { title: '' }
			function View() {
				//代理val
				val = new Proxy(val, {
					//读
					get(obj, property) {},
					//写
					set(obj, property, value) {
					//修改输入框的值
						document.querySelectorAll(`[v-model="title"]`).forEach(item => {
							item.value = value
						})
						//修改h3的值
						document.querySelector(`[v-bind="title"]`).textContent = value
						return true
					},
				})
				this.init = function () {
					const els = document.querySelectorAll('[v-model]')
					els.forEach(item => {
						//监听input的input事件,将input的值实时传入到代理中
						item.addEventListener('input', function () {
							val.title = this.value
						})
					})
				}
			}
			new View().init()

双向绑定
两种方法都是在三者之间放一个值,监听输入事件,通过改变中间值来改变三者的值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值