JS 框架 词条目录
前端Wiki/词条/MVVM 双向绑定

MVVM 双向绑定

定义把视图与数据模型用 ViewModel 连接起来,数据变了视图自动更新、视图输入也自动写回数据的模式

MVVM 在 View 与 Model 之间加了 ViewModel:它持有状态并暴露给模板,框架负责把两者的同步自动化。你只需声明 数据长什么样,布局如何呈现由模板决定——改一个变量,页面对应位置自动变化,不再手写 innerHTML 和事件拼装。

双向绑定 = 数据到视图的渲染 + 视图到数据的回写,表单是最直观的场景:输入框敲一个字,状态同步更新;状态被代码改了,输入框内容也跟着变。Vue 的 v-model、Angular 的 [(ngModel)] 都是这一思想的语法糖,底层靠响应式追踪与事件监听实现。

JavaScript
// 双向绑定的最小模型:数据变化驱动视图,输入回写数据
function bind(input, model, key) {
  // 数据 -> 视图
  Object.defineProperty(model, key, {
    get: function () { return model['_' + key]; },
    set: function (v) {
      model['_' + key] = v;
      input.value = v;          // 数据变,视图跟着变
    }
  });
  // 视图 -> 数据
  input.addEventListener('input', function (e) {
    model[key] = e.target.value; // 输入时,数据跟着变
  });
}

var state = {};
var el = document.querySelector('#name');
bind(el, state, 'name');
state.name = '张三';   // 输入框自动变成 张三
el.value = '李四';     // 手动改输入框也不会生效,需触发 input 事件回写
⚠ 常见误区
🔗 相关词条响应式原理模板语法
← 返回来源章节响应式原理