当前位置: 首页 > article >正文

前端开发:Vue中数据绑定原理

Vue 中最大的一个特征就是数据的双向绑定,而这种双向绑定的形式,一方面表现在元数据与衍生数据之间的响应,另一方面表现在元数据与视图之间的响应,而这些响应的实现方式,依赖的是数据链,因此,要了解数据绑定的原理,先要理解下面两方面内容。

一、 Vue中数据链

所谓数据链,它是一种数据关联的形式,在这种形式中,有一到多个的起始数据点,称之为元数据,而由这些元数据因某种关系衍生出的数据,称之为衍生数据,元数据与衍生数据通过数据节点交织在一起,形成数据结构网,而这种结构网,我们称之为数据链。
在这里插入图片描述
  在Vue 中,当数据链中的元数据变化时,与其关联的衍生数据,通过数据链,完成同步更新,实现数据双向绑定的效果;在Vue 实例化对象中,computed选项值,可以为开发人员生成衍生对象,当元数据变化时,生成的衍生对象将会同步更新。

实例: 使用衍生数据显示“张三,你好!”

1. 功能描述

新建一个名称为SayHello.vue的组件,在返回的数据对象中,添加一项名称为“name”的属性,初始值为“张三”,同时,在computed配置选项中,添加一个名为sayHelloName的函数,在函数中返回“张三,你好!”,并在页面中执行该函数。

2. 实现代码

在项目的components 文件夹中,新建一个名称为“ch3”的子文件夹,在这个子文件夹中,添加一个名为“SayHello”的.vue文件,在文件中加入如清单所示代码。

代码清单 SayHello.vue代码
<template>
  <div>
    <div>{{ name }}</div>
    <div>{{ sayHelloName }}</div>
  </div>
</template>
<script>
export default {
  data() {
    return {
      name: "张三",
    };
  },
  computed: {
    sayHelloName() {
      return this.name + ",你好!";
    }
  },
};
</script>
<style scoped>
div {
  margin: 10px;
  text-align: left;
}
</style>

SayHello.vue文件是一个独立的组件,需要将它导入到根组件App.vue中,并声明该组件,最后,在模板中以标签形式应用该组件,因此,App.vue文件修改后的代码,如下列代码清单所示。

<template>
  <SayHello />
</template>

<script>
import SayHello from "./components/ch3/SayHello.vue";

export default {
  name: "App",
  components: {
    SayHello
  }
};
</script>

<style>
...省略样式代码
</style>

3.页面效果

保存代码后,页面在Chrome浏览器下执行的页面效果如图下图所示。
在这里插入图片描述

4. 源码分析

在Vue 实例化配置对象中,computed选项中可以生成衍生数据,生成过程由函数来完成,该函数不接收参数,在函数体中,由于this指向实例化的Vue 对象,因此,它可以访问所有实例化对象中挂载的属性值,如this.name,表示元数据值。

此外,computed选项中的函数,虽然可以访问实例化对象中挂载的全部属性值,但它在函数中,必须使用return 语句,返回计算或衍生后的数据,通过这种形式,才可以在模板中使用双大括号方式执行函数,接收并显示返回的数据。

因此,示例中的sayHelloName函数中,先获取元数据name值,并添加“,你好!”形成一个衍生数据,同时,作用函数的返回值;当在模板中,调用该函数时,则直接将接收到的衍生数据显示在页面中,由于是衍生数据,当元数所变化时,将会通过数据链形式,同步衍生数据,因此,衍生数据也会同步更新。即修改name值为“李四”时,页面将直接显示“李四,你好!”的字样。


http://www.kler.cn/news/363557.html

相关文章:

  • 基于单片机的智能小区门禁系统设计(论文+源码)
  • QT 机器视觉 1.相机类型
  • Python小程序 - 替换文件内容
  • Shiro会话管理和加密
  • 探索 Web Audio API 的奇妙世界
  • 写一个 qq自动回话的程序
  • Redis过期Key的逐出策略
  • 101. UE5 GAS RPG 实现范围技能奥术爆发表现
  • C语言数据结构之单向链表(SingleList)
  • 【C++ 算法进阶】算法提升六
  • 《Pyhon入门:yield关键字常用用法》
  • solana phantom NFT图片显示不出来?
  • 【含开题报告+文档+PPT+源码】基于SpringBoot和Vue的编程学习系统
  • 鸿蒙中富文本编辑与展示
  • 资料下载 | ENOVIA企业集成框架解决方案
  • Spring Boot集成Shiro认证
  • Android 两种方式实现类似水波扩散效果
  • 手机pdf阅读器,用手机也能够阅读、编辑pdf文件
  • 右键以vscode打开目录的时候出现找不到应用程序
  • 亿佰特CAN转422、232、485模块解决高于115200波特率时设备失联问题
  • 一文掌握 jetbrains IDE 新 UI,还不会新 UI 的同学快看过来
  • OpenMediaVault安装插件以及重置web控制台密码
  • 软考攻略/超详细/系统集成项目管理工程师/基础知识分享18
  • Uefi Application小游戏开发之推箱子
  • idea启动报错:com.intellij.diagnostic.PluginException
  • 【数据结构】专栏开篇 | 1024程序员节