【javascript实现vue双向绑定】

概要

使用Object.defineProperty和html dom实现。

技术细节

<html>
	<div id=d2>
		<p>666</p>666
	</div>
	<p id="p2">666</p>
	<input id="i2" value='666' />
	<script>
		Object.prototype.bindDom = function(key, dom) {
			//针对不同dom,刷新不同方式input->value
			Object.defineProperty(this, key, { //绑定对象,对象属性值改变刷新dom
				get() {
					console.log(this[key + '_2'])
					return this[key + '_2']; //_2这里不完美

				},
				set(value) {
					if (dom && dom.nodeName != 'INPUT') {
						dom.innerHTML = value;
					}
					if (dom && dom.nodeName == 'INPUT') {
						dom.value = value;
					}
					//console.log(dom)
					this[key + '_2'] = value;
					console.log('set ' + value)
				}
			});
			//绑定dom
			if (dom.nodeName == 'INPUT') { //input标签
				dom.addEventListener('input', function(value) {
					this[key + '_2'] = dom.value;
					console.log('属性值修改为:', dom.value);
				});
			}


			console.log(key + '已注册bindDom函数!');
		};
		var a = {
			name: 3,
		}
		//多次绑定只有最后的生效
		//a.bindDom('name',document.getElementById('p2'));
		a.bindDom('name', document.getElementById('i2'));
		//a.bindDom('name', document.getElementById('d2'));
	</script>
</html>

小结

本代码可以刷新input标签和纯文本标签,对于其他标签未进行适配处理。

  • 5
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值