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

Vue语法【2】

1.插值表达式:

语法规则:
{{Vue实例中data的变量名}}
使用场景:

插值表达式一般使用在文本内容中,如果是元素的属性内容中则无法使用;

案例:
 <!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<!--  准备容器-->
<div id="app">//插值表达式<h1>hello,{{name}}</h1>
</div>//src属性的值即为vue环境资源所在的js文件路径<script src="vue/vue.js"></script><script>// 创建vue实例let vm=new Vue({//'#'表示选择器el:"#app",data:{name:'张三'}});
</body>
</html>       
 <!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<!--  准备容器-->
<div id="app">//插值表达式<input type="text" value="{{name}}">
</div>//src属性的值即为vue环境资源所在的js文件路径<script src="vue/vue.js"></script><script>// 创建vue实例let vm=new Vue({//'#'表示选择器el:"#app",data:{name:'张三'}});
</body>
</html>       

  在案例2中,我们在input标签中的value属性值中使用插值表达式来获取vue实例中的name变量,通过测试结果发现,此时无法获取到。

2.指令语法:

前景回顾:
上面案例2中我们在标签的属性内容中通过插值表达式来获取数据,发现获取不到,此时我们可以通过指令语法来解决此问题;
语法规则:
 v-bind:标签属性名=变量名简写:v-bind可省略简写后为(:标签属性名='变量名')
示例:
 <!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<!--  准备容器-->
<div id="app">//指令语法简写后<input type="text" :value="name">
</div>//src属性的值即为vue环境资源所在的js文件路径<script src="vue/vue.js"></script><script>// 创建vue实例let vm=new Vue({//'#'表示选择器el:"#app",data:{name:'张三'}});
</body>
</html>       

通过指令语法就可以实现在标签元素的属性内容中获取变量的值了

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<!--  准备容器-->
<div id="app"><a :href="url">点击跳转百度</a>
</div><!-- 1.引入vue环境 -->
<script src="vue/vue.js"></script>
<script>// 创建vue实例let vm=new Vue({el:"#app",data:{url:'Https://www.baidu.com'}});</script>
</body>
</html>

3.数据的绑定方式:

1.单向绑定:

概述:

在上面案例中的指令语法就属于单向绑定,即数据的改变只能通过Vue实例的data流向浏览器,而不能通过浏览器流向Vue实例的data;

示例:
 <!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<!--  准备容器-->
<div id="app"><h2>hello{{name}}</h2><input type="text" :value="name">
</div>//src属性的值即为vue环境资源所在的js文件路径<script src="vue/vue.js"></script><script>// 创建vue实例let vm=new Vue({//'#'表示选择器el:"#app",data:{name:'张三'}});
</body>
</html>       

通过测试结果可以看出,当我们在浏览器上改变输入框的值时,最上面展示的数据并未发生改变,因为数据是单向绑定的缘故,我们在浏览器上改变数据,并不会引起Vue实例中的数据变化,因此浏览器上面展示的数据也就不会改变;

2.双向绑定:只能用于表单元素的value属性

概述:
双向绑定指的是数据的改变既可以从Vue实例对象的data流向浏览器,也可以从浏览器流向Vue实例对象的data;
语法:
双向绑定的语法与单向绑定类似,只需要将v-bind改为v-model即可
v-model:value='变量名'
简写:v-model='变量名'
示例:
 <!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<!--  准备容器-->
<div id="app"><h2>hello{{name}}</h2><input type="text" v-model="name">
</div>
<!--//src属性的值即为vue环境资源所在的js文件路径-->
<script src="vue/vue.js"></script>
<script>// 创建vue实例let vm=new Vue({//'#'表示选择器el:"#app",data:{name:'张三'}});</script></body></html>

此时可以发现,当输入框内的数据改变时,最上面展示的数据也同步发生了改变,这也就实现了数据的双向绑定;

4.Vue实例中el与data属性的两种写法

1.el属性的写法:

概述:
  我们前面已经了解过了,在Vue实例对象中有两个比较关键的属性,其中el属性主要用于Vue实例对象与div容器的绑定。对于el属性的定义一般有两种写法,一个是在创建Vue实例对象时同时进行el属性的定义,另一种则是创建Vue实例对象完成后再进行el属性的定义;
写法
方式1:创建Vue实例对象时同时进行el属性的定义
  <!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<!--  准备容器-->
<div id="app"></div>
<!--//src属性的值即为vue环境资源所在的js文件路径-->
<script src="vue/vue.js"></script>
<script>// 创建vue实例let vm=new Vue({//'#'表示选择器el:"#app",data:{name:'张三'}});</script></body></html>

说明:此种方式会导致Vue实例对象的效率较低

方式2:创建Vue实例对象完成后再进行el属性的定义
  <!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<!--  准备容器-->
<div id="app"></div>
<!--//src属性的值即为vue环境资源所在的js文件路径-->
<script src="vue/vue.js"></script>
<script>// 创建vue实例let vm=new Vue({data:{name:'张三'}});//在Vue实例创建完成后 绑定容器vm.$mount("#app")</script></body></html>

2.data属性的写法:

概述:
  data属性主要用于存储数据内容,在定义时一般也有两两种写法,一种是对象式写法,一种是函数式写法
写法:
方式1:对象式
  <!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<!--  准备容器-->
<div id="app"></div>
<!--//src属性的值即为vue环境资源所在的js文件路径-->
<script src="vue/vue.js"></script>
<script>// 创建vue实例let vm=new Vue({//'#'表示选择器el:"#app",data:{name:'张三'}});</script></body></html>

说明:上面的案例中即为对象式写法,在data中的数据都以键值对形式进行存储。但此方式只适用于单页面语法学习时使用,在实际的项目中,会存在多个页面组件,这种对象式写法就不适用了,因为如果其中一个页面组件对data中的数据进行了修改,这个改动会导致所有的页面组件中的数据同时被修改;

方式2:函数式:
    <!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<!--  准备容器-->
<div id="app"></div>
<!--//src属性的值即为vue环境资源所在的js文件路径-->
<script src="vue/vue.js"></script>
<script>// 创建vue实例let vm=new Vue({//'#'表示选择器el:"#app",data(){return{name:"张三"}}});</script></body></html>
 说明:上面的案例即为data的函数式写法,在此种方式下,数据不再是直接存储在data对象中,而是通过data函数返回一个新对象,数据是存储在这个新对象中的。这样一来就可以解决多个页面组件环境下,数据改动的问题了,因为对于每个页面组件来说,它们都操作的是通过data函数获取的新对象,彼此之间是独立的,也就不会造成data对象式写法中的问题了;

5.MVVM模型:

1.概述:

 <font style="color:rgba(0, 0, 0, 0.85);">MVVM(Model-View-ViewModel)是一种软件架构模式,主要用于构建用户界面。它源自于经典的 MVC(Model-View-Controller)模式,并在前端开发中得到了广泛应用,尤其是在使用框架如 Angular、Vue.js 和 React 时。</font>
  1. Model(模型):
  • 案例中的data部分:代表应用程序的数据和业务逻辑。它通常包含数据的存储、处理和验证等功能。Model 不应该直接与视图进行交互,而是通过 ViewModel 来传递数据。
  • 例如,在一个电子商务应用中,Model 可能包括商品信息、用户订单、库存数据等。
  1. View(视图):
  • 模板代码部分(案例中的div容器部分):负责显示数据和接收用户输入。它是用户与应用程序交互的界面,通常由 HTML、CSS 和 JavaScript 组成。View 不应该直接操作 Model,而是通过 ViewModel 来获取和更新数据。
  • 例如,在一个网页应用中,View 可能是一个包含表单、列表和图表的页面。
  1. ViewModel(视图模型):
  • 案例中的Vue实例对象:连接 Model 和 View 的桥梁。它将 Model 中的数据转换为 View 可以显示的格式,并将 View 中的用户输入转换为 Model 可以处理的格式。ViewModel 通常包含数据绑定、命令和事件处理等功能。
  • 例如,在一个 Vue.js 应用中,ViewModel 就是 Vue 实例,它通过数据绑定将 Model 中的数据映射到 View 中的模板,同时通过事件处理将 View 中的用户输入传递给 Model。

2.图解:

3.原理:

  • ViewModel(Vue对象)将 Model (data)中的数据通过Object.defineProperty() 复制到自身,并为data中的每个属性提供get/set方法,通过get/set方法实现了对data中数据的读写操作;
  • 再通过模板语法将 ViewModel(Vue对象)中的数据绑定到 View 中的元素上,使得当 Model 中的数据发生变化时,View 中的元素会自动更新。
  • 同时,当 View 中的元素发生变化时,ViewModel 会自动将用户输入转换为 Model 可以处理的格式,并更新 Model 中的数据。

4.总结:

  • data中所有的属性,最后都出现在了Vue对象身上
  • 对象身上的所有的属性以及 Vue原型身上所有的属性在Vue的模板上都可以直接使用;

6.Vue中的数据代理:

1.概述:

在 Vue 中,数据代理是指通过 Vue 实例将对数据的访问代理到 Vue 实例的 <font style="color:rgba(0, 0, 0, 0.85);">_data</font> 属性上,从而实现数据的响应式处理和方便的访问方式。

2.原理:

1.使用 Object.defineProperty()
  • 在 Vue 2.x 中,数据代理是通过 Object.defineProperty() 方法实现的。这个方法可以在一个对象上定义一个新的属性,或者修改一个对象的现有属性,并返回这个对象。
  • Vue 使用 Object.defineProperty() 方法将 data 中的每个属性都定义为响应式的,并将它们代理到 Vue 实例上。这样,当你访问或修改 Vue 实例上的属性时,实际上是在访问或修改 _data 中的属性。
2.使用 Proxy
  • 在 Vue 3.x 中,数据代理是通过 Proxy 对象实现的。Proxy 对象可以创建一个代理对象,用于拦截对目标对象的各种操作,并在操作发生时执行自定义的逻辑。
  • Vue 使用 Proxy 对象将 data 中的每个属性都代理到 Vue 实例上,并在代理对象上实现了响应式处理。这样,当你访问或修改 Vue 实例上的属性时,实际上是在访问或修改 data 中的属性。

3.数据代理的优势

  1. 提高性能:
  • 通过数据代理,Vue 可以在数据发生变化时只更新与该数据相关的视图部分,而不需要重新渲染整个页面。这样可以提高应用的性能和响应速度。
  • 例如,当你在 Vue 组件中修改一个数据属性时,Vue 只会更新与该属性相关的视图部分,而不会更新整个页面。
  1. 方便的开发体验:
  • 通过数据代理,Vue 实例上的所有数据属性都可以直接通过 this.propertyName 的方式访问,而不需要通过 this._data.propertyName 的方式访问。这样可以使代码更加简洁和易读,提高开发效率。
  • 例如,在 Vue 组件中,可以直接使用 this.message 来访问 data 中的 message 属性,而不需要使用 this._data.message

相关文章:

Vue语法【2】

1.插值表达式&#xff1a; 语法规则&#xff1a; {{Vue实例中data的变量名}}使用场景&#xff1a; 插值表达式一般使用在文本内容中&#xff0c;如果是元素的属性内容中则无法使用&#xff1b; 案例&#xff1a; <!DOCTYPE html> <html lang"en"> &l…...

2.2.1 05年T2

引言 本文将从一预习、二自习、三学习、四复习等四个阶段来分析2005年考研英语阅读第二篇文章。为了便于后续阅读&#xff0c;我将第四部分复习放在了首位。 四、复习 方法&#xff1a;错误思路分析总结考点文章梳理 4.1 错题分析 题目&#xff1a;26&#xff08;细节题&…...

每日c/c++题 备战蓝桥杯(修理牛棚 Barn Repair)

修理牛棚 Barn Repair 题解 问题背景与挑战 在一个暴风雨交加的夜晚&#xff0c;Farmer John 的牛棚遭受了严重的破坏。屋顶被掀飞&#xff0c;大门也不翼而飞。幸运的是&#xff0c;许多牛正在度假&#xff0c;牛棚并未住满。然而&#xff0c;为了保护那些还在牛棚里的牛&am…...

6个月Python学习计划 Day 3

&#x1f3af; 今日目标 掌握 while 和 for 循环的使用方式理解 range() 的工作机制实践&#xff1a;打印 1~100、累加、九九乘法表等常见程序逻辑 &#x1f9e0; 学习内容详解 while 循环 i 1 while i < 5:print(f"第 {i} 次循环")i 1&#x1f4cc; 特点&…...

Linux虚拟文件系统(2)

2.3 目录项-dentry 目录项&#xff0c;即 dentry&#xff0c;用来记录文件的名字、索引节点指针以及与其他目录项的关联关系。多个关联的目录项&#xff0c;就构成了文件系统的目录结构。和上一章中超级块和索引节点不同&#xff0c;目录项并不是实际存在于磁盘上的&#xff0c…...

【数据结构】栈和队列(上)

目录 一、栈&#xff08;先进后出、后进先出的线性表&#xff09; 1、栈的概念及结构 2、栈的底层结构分析 二、代码实现 1、定义一个栈 2、栈的初始化 3、入栈 3、增容 4、出栈 5、取栈顶 6、销毁栈 一、栈&#xff08;先进后出、后进先出的线性表&#xff09; 1、…...

科技赋能·长效治理|无忧树建筑修缮渗漏水长效治理交流会圆满举行!

聚焦行业痛点&#xff0c;共话长效未来&#xff01;5月16日&#xff0c;由无忧树主办的主题为“科技赋能长效治理”的建筑修缮渗漏水长效治理技术交流会在上海圆满举行。来自全国的建筑企业代表、专家学者、技术精英齐聚一堂&#xff0c;共探渗漏治理前沿技术&#xff0c;见证科…...

【闲聊篇】java好丰富!

1、在学习mybatis-plus的文档时&#xff0c;发现引入了solon依赖&#xff0c;才发现这是一个对标spring生态的框架&#xff0c;有意思&#xff01; 还有若依框架&#xff0c;真的好丰富~~~~~~~ 2、今天面试官问我&#xff0c;他说很少遇到用redission做延迟队列的。后面我就反…...

STL中list的模拟

这里写目录标题 list 的节点 —— ListNodelist 的 “导览员” —— ListIteratorlist 的核心 —— list 类构造函数迭代器相关操作容量相关操作 结尾 在 C 的 STL&#xff08;标准模板库&#xff09;中&#xff0c;list 是一个十分重要的容器&#xff0c;它就像一个灵活的弹簧…...

6.3.2图的深度优先遍历

知识总览&#xff1a; 树的先根遍历&#xff1a; 采用递归一直找某个节点的子树直到找不到从上往下找 访问根节点1&#xff0c;1的子树有2、3、4,访问2&#xff0c;2节点子树有5访问5,5没有子树&#xff0c;退回到2,2还有子树6访问6,6没有子树再退回到2,2的子树都被访问了再退…...

畅游Diffusion数字人(30):情绪化数字人视频生成

畅游Diffusion数字人(0):专栏文章导航 前言:仅从音频生成此类运动极具挑战性,因为它在音频和运动之间存在一对多的相关性。运动视频的情绪是多元化的选择,之前的工作很少考虑情绪化的数字人生成。今天解读一个最新的工作FLOAT,可以生成制定情绪化的数字人视频。 目录 贡献…...

UE5 Va Res发送请求、处理请求、json使用

文章目录 介绍发送一个Get请求发送Post请求设置请求头请求体带添json发送请求完整的发送蓝图 处理收到的数据常用的json处理节点 介绍 UE5 自带的Http插件&#xff0c;插件内自带json解析功能 发送一个Get请求 只能写在事件图表里 发送Post请求 只能写在事件图表里 设置…...

关于flutter中Scaffold.of(context).openEndDrawer();不生效问题

原因&#xff1a; 在 Flutter 中&#xff0c;Scaffold.of(context) 会沿着当前的 context 向上查找最近的 Scaffold。如果当前的 widget 树层级中没有合适的 Scaffold&#xff08;比如按钮所在的 context 是在某个子 widget 中&#xff09;&#xff0c;就找不到它。 解决办法…...

【C++】深入理解C++中的函数与运算符重载

文章目录 前言一、什么是重载&#xff1f;1.1 函数重载1.1.1 函数重载的规则1.1.2 示例&#xff1a;函数重载 1.2 运算符重载1.2.1 运算符重载的规则1.2.2 示例&#xff1a;运算符重载 1.2.3 运算符重载的注意事项 二、重载的注意事项2.1 重载的二义性2.2 默认参数和重载2.3 运…...

【读代码】BAGEL:统一多模态理解与生成的模型

一、项目概览 1.1 核心定位 BAGEL是字节跳动推出的开源多模态基础模型,具有70亿激活参数(140亿总参数)。该模型在统一架构下实现了三大核心能力: 多模态理解:在MME、MMBench等9大评测基准中超越Qwen2.5-VL等主流模型文本生成图像:生成质量媲美SD3等专业生成模型智能图像…...

隧道自动化监测解决方案

行业现状 隧道作为一种重要的交通运输通道&#xff0c;不管是缓解交通压力&#xff0c;还是让路网结构更趋于完善&#xff0c;它都有着不可估量的作用。隧道在运营过程中&#xff0c;由于受到材料退化、地震、人为因素等影响会发生隧道主体结构的损坏和劣化。若不及时检修和维护…...

如何通过EventChannel实现Flutter与原生平台的双向通信?

在Flutter开发中,EventChannel是处理单向数据流的核心组件,尤其适用于原生平台(Android/iOS)主动向Flutter端推送实时数据的场景,例如传感器数据、后台任务通知等。虽然EventChannel本身以原生到Flutter的单向通信为主,但结合特定设计模式,仍可实现双向交互。本文将详细…...

游戏引擎学习第307天:排序组可视化

简短谈谈直播编程的一些好处。 上次结束后&#xff0c;很多人都指出代码中存在一个拼写错误&#xff0c;因此这次我们一开始就知道有一个 bug 等待修复&#xff0c;省去了调试寻找错误的时间。 今天的任务就是修复这个已知 bug&#xff0c;然后继续排查其他潜在的问题。如果短…...

java接口自动化初识

简介 了解什么是接口和为什么要做接口测试。并且知道接口自动化测试应该学习哪些技术以及接口自动化测试的落地过程。 一、什么是接口 在这里我举了一个比较生活化的例子&#xff0c;比如我们有一台笔记本&#xff0c;在笔记本的两端有很多插口。例如&#xff1a;USB插口。那…...

工作流引擎-01-Activiti 是领先的轻量级、以 Java 为中心的开源 BPMN 引擎,支持现实世界的流程自动化需求

前言 大家好&#xff0c;我是老马。 最近想设计一款审批系统&#xff0c;于是了解一下关于流程引擎的知识。 下面是一些的流程引擎相关资料。 工作流引擎系列 工作流引擎-00-流程引擎概览 工作流引擎-01-Activiti 是领先的轻量级、以 Java 为中心的开源 BPMN 引擎&#x…...

时序数据库IoTDB的分片与负载均衡策略深入解析

一、引言 随着数据库服务的业务负载增加&#xff0c;扩展服务资源成为必然需求。扩展方式主要分为纵向扩展和横向扩展。纵向扩展通过增加单台机器的能力&#xff08;如内存、硬盘、处理器&#xff09;来实现&#xff0c;但受限于单台机器的硬件能力。而横向扩展则通过增加更多…...

NVM安装使用及问题解决

目录 一、前言 二、NVM安装 三、配置下载源 四、nvm使用 五、安装nvm list available没有的版本 六、问题解决 一、前言 如果你开发 Node.js 项目&#xff0c;可能会遇到这些问题&#xff1a; ①新项目需要 Node.js 18&#xff0c;但老项目只能用 Node.js 14&#xff0c;…...

C++学习之STL学习:string类使用

在之前的学习中&#xff0c;我们初步了解到了STL的概念&#xff0c;接下来我们将深入学习STL中的string类的使用&#xff0c;后续还会结合他们的功能进行模拟实验 目录 为什么要学习string类&#xff1f; 标准库中的string类 string类&#xff08;了解&#xff09; auto和范围…...

基于 STC89C52 的养殖场智能温控系统设计与实现

摘要 本文提出一种基于 STC89C52 单片机的养殖场环境温度智能控制系统,通过集成高精度温度传感器、智能执行机构及人机交互模块,实现对养殖环境的实时监测与自动调控。系统具备温度阈值设定、超限报警及多模式控制功能,可有效提升养殖环境稳定性,降低能耗与人工成本。 一…...

redis哨兵服务

配置主机Host67为master服务器配置主机host68为 slave服务器配置主机host69运行哨兵服务测试配置 IP地址主机名192.168.10.167redis167192.168.10.168redis168192.168.10.169redis169 步骤一&#xff1a;配置主机Host67为master服务器 [rootredis169 ~]# vim /etc/redis.c…...

5月24日day35打卡

模型可视化与推理 知识点回顾&#xff1a; 三种不同的模型可视化方法&#xff1a;推荐torchinfo打印summary权重分布可视化进度条功能&#xff1a;手动和自动写法&#xff0c;让打印结果更加美观推理的写法&#xff1a;评估模式 作业&#xff1a;调整模型定义时的超参数&#x…...

嵌入式<style>设计模式

每天分享一个web前端开发技巧。 今天分享的主题是&#xff0c;如何提升前端代码的内聚性。我们在写<style></style>的时候&#xff0c;往往把大量无关联的样式写在同一个<style>下&#xff0c;而且离相关的html元素很远&#xff0c;这样导致每次想修改某个元…...

Kotlin 中该如何安全地处理可空类型?

在 Kotlin 中&#xff0c;可空类型&#xff08;如 String?&#xff09;是语言设计的核心特性之一&#xff0c;旨在从编译时避免 NullPointerException&#xff08;NPE&#xff09;。 1 核心处理方式 1.1 安全调用操作符&#xff08;?.&#xff09; 直接调用可空对象的方法…...

基于大模型预测的视神经脊髓炎技术方案

目录 一、术前评估与预测1. 数据采集与预处理2. 大模型构建与训练3. 术前风险评估与预测二、术中监测与决策支持1. 实时数据采集与传输2. 术中决策支持系统三、术后管理与康复1. 术后早期预警与监测2. 康复效果预测与个性化方案四、并发症风险预测与防控1. 并发症风险预测模型2…...

使用防火墙禁止程序联网(这里禁止vscode)

everything搜一下Code.exe的安装路径&#xff1a;D:\downloadApp1\vscode\Microsoft VS Code\Code.exe 方法&#xff1a;使用系统防火墙&#xff08;推荐&#xff09; Windows 通过防火墙阻止 VS Code&#xff1a; 打开 Windows Defender 防火墙&#xff08;控制面板 > 系统…...