使用原生js实现数据的双向绑定

一个基础方法的认识

Object.defineProperty(obj,prop,config)

用法

顾名思义:为一个对象添加一个属性

参数

obj	//要添加属性的对象
prop	//属性名
config	//属性配置

使用该方法的原因

之所以要使用该方法主要是为了对定义的属性进行配置
在config中,我们可以对属性定义getter和setter方法

实现

var data = {};
var tdata = {};

        function bindProp(id,name,prop='value'){
            try{
                //检查属性是否已经存在 不存在则定义配置属性
                if(tdata[name] == undefined){
                    tdata[name] = '';   //使得它默认等于空字符串;
                    tdata[`${name}_setEns`] = [];   //创建该属性的设置事件盒子

                    //定义data中的属性
                    Object.defineProperty(data,name,{
                        get:()=>tdata[name],
                        set:value=>{
                            //执行事件盒子中的事件
                            tdata[`${name}_setEns`].forEach(event => {
                                eval(event);
                            });
                            //复制
                            tdata[name] = value;
                        }
                    })
                }
                
                //为对应属性的事件盒子添加事件  修改DOM中的值
                tdata[`${name}_setEns`].push(`document.getElementById('${id}').${prop} = value;`);

                //为DOM添加事件,修改data中的值
                document.getElementById(id).addEventListener('keydown',function(e){data[name]=this[prop]});
                document.getElementById(id).addEventListener('keyup',function(e){data[name]=this[prop]});
            }catch(error){
                console.error("绑定失败",error);
            }
        }


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值