Vue中v-model双向数据绑定

简介: Vue中v-model双向数据绑定

双向数据绑定原理


数据监听 数据劫持

v-model特指表单元素,v-bind实现数据从模型层m[data]到视图层view显示数据单向流,v-on事件的触发将视图[用户操作]修改了的数据存储到模型层。从而实现双向流数据。


数据响应式如何实现?数据劫持如何实现?


mvvm m model模型 v 视图 vm viewmodel 视图模型 沟通模型和视图


Vue2.x:代理

当把一个普通的JavaScript对象传给Vue实例的data选项,Vue将遍历此对象所有的属性,使用Object.defineProperty把这些属性全部转为getter(获取)/setter(设置)。

// es5中提供的方法
Object.defineProperty(obj, prop, descriptor)
// 方法会直接在一个对象上定义一个新属性,或者修改一个对象的现有属性,并返回此对象。
// 应当直接在Object构造器对象上调用此方法,而不是在任意一个Object类型的实例上调用。

obj

要定义属性的对象。

prop

要定义或修改的属性的名称 。

descriptor

要定义选项,“{ }”。在这里面设置getter和setter(计算属性)。


案例:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <div>
        <div><input type="text" id="ipt" value="" oninput="change(this)" /></div>
        <div>字符串: <div id="cnt"></div>
        </div>
    </div>
    <script>
        // 初始的data数据
        var data = {
            msg: "人生无常,大肠包小肠"
        }
        // es5里的方法来代理操作
        var obj = {}
        Object.defineProperty(obj, "msg", {
            // 当获取obj.msg的值的时候被执行
            get() {
                return data.msg
            },
            // 当给obj.msg赋值的时候会被执行
            set(val) {
                data.msg = val
                // 通知页面更新
                document.getElementById("cnt").innerText = val
            }
        })
        document.getElementById("ipt").value = obj.msg
        document.getElementById("cnt").innerText = obj.msg
        function change(o){
            obj.msg = o.value
        }
    </script>
</body>
</html>


目录
相关文章
|
2月前
|
JavaScript
Vue中如何实现兄弟组件之间的通信
在Vue中,兄弟组件可通过父组件中转、事件总线、Vuex/Pinia或provide/inject实现通信。小型项目推荐父组件中转或事件总线,大型项目建议使用Pinia等状态管理工具,确保数据流清晰可控,避免内存泄漏。
279 2
|
24天前
|
缓存 JavaScript
vue中的keep-alive问题(2)
vue中的keep-alive问题(2)
250 137
|
5月前
|
人工智能 JavaScript 算法
Vue 中 key 属性的深入解析:改变 key 导致组件销毁与重建
Vue 中 key 属性的深入解析:改变 key 导致组件销毁与重建
709 0
|
4月前
|
人工智能 JSON JavaScript
VTJ.PRO 首发 MasterGo 设计智能识别引擎,秒级生成 Vue 代码
VTJ.PRO发布「AI MasterGo设计稿识别引擎」,成为全球首个支持解析MasterGo原生JSON文件并自动生成Vue组件的AI工具。通过双引擎架构,实现设计到代码全流程自动化,效率提升300%,助力企业降本增效,引领“设计即生产”新时代。
377 1
|
4月前
|
JavaScript 安全
在 Vue 中,如何在回调函数中正确使用 this?
在 Vue 中,如何在回调函数中正确使用 this?
215 0
|
JavaScript 前端开发 UED
如何在 Vue 自定义组件中正确使用 v-model 进行数据的双向绑定?
如何在 Vue 自定义组件中正确使用 v-model 进行数据的双向绑定?
383 0
|
JavaScript 前端开发 算法
web前端面试高频考点——Vue组件间的通信及高级特性(多种组件间的通信、自定义v-model、nextTick、插槽)
web前端面试高频考点——Vue组件间的通信及高级特性(多种组件间的通信、自定义v-model、nextTick、插槽)
326 0
|
JavaScript
Vue:自定义v-model数据双向绑定
Vue:自定义v-model数据双向绑定
170 0
Vue:自定义v-model数据双向绑定
|
容器 JavaScript
Vue自定义v-model
版权声明:本文首发 http://asing1elife.com ,转载请注明出处。 https://blog.csdn.net/asing1elife/article/details/82811783 ...
1180 0
|
5月前
|
JavaScript UED
用组件懒加载优化Vue应用性能
用组件懒加载优化Vue应用性能