IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> VUE 双向数据绑定原理分析 -> 正文阅读

[JavaScript知识库]VUE 双向数据绑定原理分析

双向数据绑定介绍

所谓双向数据绑定,是指当 view 的数据变化时将变化同步到 model,而当 model数据变化时将数据同步到 view

什么是 view 和 model

view 可以理解为浏览器页面上看到的数据,例如 input 等各种标签中的数据。

model可以理解为看不见的数据,是给后台处理的数据,或者从后台接收到的数据。

双向数据绑定的业务需求

我们需要把 view 中的数据同步到 model然后交给后台处理。

也需要把从后台获取到的 model数据显示到 view

双向数据绑定的原理分析

  1. view 中数据变化时,我们需要监听变化然后将变化后的数据同步到 model中。
  2. model中的数据变化时,我们需要监听变化将变化后的数同步到 view 中。

双向数据绑定实现

首先我们看下 VUE 中的双向绑定

<body>
	<input id="app" v-model:value="message" >
<script>
const vm = new Vue({
  el: '#app',
  data: {
    message: 'Hello, VUE!'
  }
})
</script>
</body>

我们看下控制台输出

当我们在控制台输入 vm.message 我们看到 model 数据与 view 数据一致。

在这里插入图片描述

当我们修改 model 数据 为 i am ok! 时,我们看到 view 的数据也发生变化。

在这里插入图片描述

当我们修改 view 数据为 i am ok! jmc 时,我们看到 model 数据也跟着改变。

在这里插入图片描述

这就是 VUE 的双向数据绑定。

双向数据绑定简易实现(单属性)

  1. input 标签添加 keyup 监听事件,当 input 值发生变化时会触发时间将值同步给 book.model
  2. 我们使用 Object.defineProperty() 监听 book 对象的 model 属性值,当 model 变化时会调用 set 函数同步 view

Object.defineProperty() 的详细用法可以参考 MDN文档

<body>
    <div id="app">
        <input id="view" value="哈利波特"/>
    </div>
</body>
<script>
    const book = {}
    model = document.getElementById("view").value
    // defineProperty监听model,只要model数据改变,就执行set操作
    Object.defineProperty(book, 'model', {
        set: function (newValue) {
            model = newValue;
            document.getElementById("view").value = newValue;
        },
        get: function () {
            return model
        }
    })
    // 监听input,只要view数据有变化就同步赋值给model
    document.addEventListener("keyup", (e) => book.model = e.target.value)

</script>

同样我们看下控制台输出

在这里插入图片描述

我们将 model 数据改为 java入门view 数据也一起变化。

在这里插入图片描述

我们再将 view 数据改为 七天入门 Python,发现 model 数据也改变了。

在这里插入图片描述

可以看到,我们已经实现了一个简易的单属性的双向数据绑定。

END

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2021-07-15 16:04:45  更:2021-07-15 16:07:23 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/20 9:43:35-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码