数据双向绑定的原生写法原理

本文介绍了一种使用JavaScript实现的双向数据绑定机制,通过对象数据劫持的方法,实现了输入框值与页面元素内容的实时同步更新。该机制利用了`Object.defineProperty`来监听数据变化,并在数据改变时自动更新视图。

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

<body>
    <input type="text" name="" id="">
    <div></div>
    <script>
        let input = document.querySelector('input')
        let box = document.querySelector('div')
        var data = {
            name: ''
        }
        
        // 对象的数据劫持方法
        Object.defineProperty(this.data, 'name', {
           
        //    获取截取的数据
            get() {
                // 返回出去
                return input.value
            },
          
        //   将截取的数据设置给box
            set(i) {
                box.innerHTML = i
                input.value = i
            }
        })

        // 监听输入框键盘弹起事件
        input.addEventListener('keyup', (e) => {
            this.data.name = e.target.value
        })
    </script>
</body>
### 实现 Vue.js 中 `v-model` 功能 为了理解如何在纯 JavaScript 中实现类似于 Vue.js 的 `v-model` 指令,可以考虑创建一个双向绑定机制。这涉及到监听输入框的变化并将这些变化反映到模型数据中,同时也能够更新视图中的显示内容。 下面是一个简单的例子来展示这一过程: #### HTML 结构 ```html <input type="text" id="inputField"> <p id="displayArea"></p> ``` #### JavaScript 代码 ```javascript // 获取 DOM 元素 const inputField = document.getElementById('inputField'); const displayArea = document.getElementById('displayArea'); let modelValue; // 定义用于存储值的变量 // 设置初始状态 modelValue = ''; updateView(); // 更新视图函数 function updateView() { displayArea.textContent = modelValue; } // 添加事件监听器以处理输入改变 inputField.addEventListener('input', (event) => { const newValue = event.target.value; // 如果新旧值不同,则同步至模型并刷新视图 if (newValue !== modelValue) { modelValue = newValue; updateView(); } }); // 同样地,在其他地方修改 modelValue 变量时也应调用 updateView 函数, // 这样才能保持视图与模型的一致性。 ``` 通过上述方法实现了基本的数据双向绑定效果[^1]。每当用户更改 `<input>` 字段的内容时,都会触发相应的逻辑去更新页面上的 `<p>` 标签内的文本;反之亦然——如果程序内部改变了 `modelValue` 值,那么也会自动调整界面上呈现的信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值