JS双向数据绑定

本文介绍两种实现MVVM模式的方法:1. 使用Object.defineProperty方法,通过setter和getter来同步视图和数据模型。2. 利用Proxy对象,实现更灵活的数据拦截和操作。通过实例演示了如何在输入框修改时实时更新DOM元素。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<p id="getter"></p>
<input type="text" id="setter">

 1. defineProperty方法

var p = document.getElementById('getter');
var input = document.getElementById('setter');
mvvm(p, input);
function mvvm(p, input) {
  input.addEventListener('keyup', modelViewViewModel);
  var demo = new Object(null);
  Object.defineProperty(demo, 'val', {
    set: function (value) {
      p.innerText = value; // value,变更后的结果
    },
    get: function () {
      return val;
    }
  })
  function modelViewViewModel() {
    demo['val'] = input.value
  }
}

2. proxy方式

let data = {
  p: document.getElementById('getter'),
  input: document.getElementById('setter')
}
mvvm(data);
function mvvm(data) {
  data.input.addEventListener('keyup', modelViewViewModel); // set
  let demo = new Proxy(data, {
    set(target, key, value) {
      console.log(value);
      data.p.innerText = value
    },
    get(target, key) {
      console.log(target, key, target[key].innerText);
      return target[key].innerText
    }
  })
  console.log(demo.p); // get
  function modelViewViewModel() {
    demo.p = data.input.value
  }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值