谷粒商城实战笔记-38-前端基础-Vue-指令-单向绑定双向绑定

文章目录

  • 一,插值表达式
    • 注意事项1:不适合复杂的逻辑处理
    • 注意事项2:插值表达式支持文本拼接
    • 注意事项3:插值表达式只能在标签体中
  • 二,v-html和v-text
    • `v-text`
    • `v-html`
    • 区别总结:
    • 最佳实践
  • 三,v-model
    • 复选框
    • 文本输入框
    • 单选按钮
    • 下拉列表
  • 四,v-bind
    • 基本用法
    • 绑定 `class` 属性
    • 绑定 `style` 属性

本节的主要内容是学习几个绑定指令:

  • 插值表达式
  • v-html
  • v-text
  • v-model
  • v-bind

一,插值表达式

插值表达式是一种用于在模板中动态插入数据的方法。

插值表达式允许在双大括号 {{ }} 中嵌入 JavaScript 表达式,Vue 会自动解析这些表达式并将结果渲染到 DOM 中。这种方式主要用于展示或计算数据,而不涉及复杂的逻辑处理。

插值表达式的使用非常直接,你只需在模板中需要显示动态数据的地方使用双大括号即可。例如:

<p>{{ message }}</p>

在上面的例子中,{{ message }} 就是一个插值表达式,它会显示 Vue 实例中 message 属性的值。

插值表达式可以包含任何合法的 JavaScript 表达式,包括变量、函数调用、算术运算等。例如:

<p>{{ price * quantity }}</p>

在这个例子中,插值表达式 {{ price * quantity }} 会显示 pricequantity 属性相乘的结果。

注意事项1:不适合复杂的逻辑处理

需要注意的是,尽管插值表达式可以包含表达式,但不适合复杂的逻辑处理。对于复杂的逻辑,Vue 推荐使用计算属性(computed properties)或方法(methods),这样可以让模板保持清晰,将复杂逻辑分离到更合适的地方。

注意事项2:插值表达式支持文本拼接

此外,插值表达式支持文本拼接,可以通过加号或字符串模板字面量实现:

<p>{{ firstName + ' ' + lastName }}</p>

<p>{{ `${firstName} ${lastName}` }}</p>

以上就是 Vue 中插值表达式的基本概念和使用方式。它为数据驱动的 UI 提供了简单而强大的工具,使得开发者可以轻松地将数据绑定到视图中。

注意事项3:插值表达式只能在标签体中

插值表达式只能在标签体中。

<p>{{ message }}</p>

不能用在标签属性中,下面用法是错误的。

<p color="{{color}}">标签属性中使用插值表达式是错误用法,不能达到预期目的</p>

二,v-html和v-text

在 Vue.js 中,v-htmlv-text 都是用来将数据插入到 DOM 中的指令,但它们的使用场景和处理方式有所不同。

v-text

v-text 指令用于将数据作为纯文本插入到 DOM 节点中。它会替换整个节点的文本内容,而不会解析 HTML 标签。这通常用于安全地插入文本数据,避免潜在的 XSS(跨站脚本)攻击。

用法示例:

<div v-text="greeting"></div>

在 Vue 实例中:

let vm = new Vue({el: '#app',data: {greeting: '<strong>Hello, Vue!</strong>'}
})

这段代码会将 “Hello, Vue!” 插入到 div 中,但不会将其解析为 HTML,即使 greeting 包含 HTML 标签。

在这里插入图片描述

v-html

相比之下,v-html 指令会将数据作为 HTML 插入到 DOM 中,也就是说,如果数据中包含 HTML 标签,这些标签会被解析并显示为实际的 HTML 元素。这通常用于需要动态生成 HTML 结构的情况,但同时也增加了安全风险,因为未经适当清理的 HTML 数据可能包含恶意脚本。

用法示例:

<div v-html="greeting"></div>

在 Vue 实例中:

let vm = new Vue({el: '#app',data: {greeting: '<strong>Hello, Vue!</strong>'}
})

这段代码会将 <strong>Hello, Vue!</strong> 解析为 HTML,并显示加粗的文本 “Hello, Vue!”。

在这里插入图片描述

区别总结:

  • 安全性v-text 更安全,因为它总是将数据作为纯文本插入,不解析 HTML。v-html 则可能引发安全问题,因为它会解析并渲染 HTML 标签。
  • 用途v-text 适用于插入文本数据,而 v-html 适用于插入需要被解析为实际 HTML 的数据。
  • 处理 HTML 标签v-text 忽略 HTML 标签,将其视为普通文本;v-html 则会解析并显示 HTML 标签。
  • 二者都是单向绑定,元素绑定model,model不绑定元素,元素值改变时model值不会更新。

最佳实践

在实际开发中,推荐尽可能使用 v-text,并在确实需要动态生成 HTML 时才使用 v-html,同时确保插入的数据经过了适当的清理和验证,以防止 XSS 攻击。

三,v-model

v-model 是 Vue.js 中用于实现表单输入和其他 UI 控件与数据双向绑定的指令。它简化了数据绑定的过程,使得数据模型和用户界面能够实时同步。下面是 v-model 的一些用法示例及注意事项:

复选框

<!-- 在复选框中使用 v-model -->
<label for="checkA">Java</label>
<br>
<input type="checkbox" id="checkB" value="PHP" v-model="language">
<label for="checkB">PHP</label>
<br>
<input type="checkbox" id="checkC" value="Python" v-model="language">
<label for="checkC">Python</label>
<p>选中的有:{{language.join(',')}}</p>
let vm = new Vue({el: '#app',data: {language: ['Java','PHP']}
})

在这里插入图片描述

对于复选框,v-model 通常绑定到一个数组,数组中的值代表被选中的复选框。

在这里插入图片描述

文本输入框

<!-- 在文本输入框中使用 v-model -->
<input v-model="message" placeholder="编辑我">

在这个例子中,message 数据属性将被绑定到输入框的值,任何输入框中的更改都会立即反映到 message 的值上。

单选按钮

<!-- 在单选按钮中使用 v-model -->
<input type="radio" id="optionA" value="A" v-model="selectedOption">
<label for="optionA">选项 A</label>
<br>
<input type="radio" id="optionB" value="B" v-model="selectedOption">
<label for="optionB">选项 B</label>

这里,selectedOption 数据属性将被设置为用户选择的选项的值。

下拉列表

<!-- 在下拉列表中使用 v-model -->
<select v-model="selectedValue"><option disabled value="">请选择</option><option value="A">选项 A</option><option value="B">选项 B</option>
</select>

这里,selectedValue 数据属性将被设置为用户选择的选项的值。

四,v-bind

v-bind 是 Vue.js 中的一个核心指令,用于动态地将数据绑定到 HTML 元素的属性上。它可以用于绑定任何类型的属性,包括 srchrefclassstyle 等。v-bind 的语法是在属性前加上 v-bind: 或者简写为 :

基本用法

首先,来看一个基本的 v-bind 用法,绑定一个 src 属性:

<img :src="imageUrl">

假设 Vue 实例中有如下数据:

data() {return {imageUrl: 'https://example.com/image.jpg'}
}

那么,上述模板代码会将图片的 src 属性绑定到 imageUrl 的值上。

绑定 class 属性

v-bind:classv-bind:class 的简写 :class 允许你动态地绑定一个或多个 CSS 类。这可以是字符串或对象形式。

字符串形式

<div :class="className"></div>
let vm = new Vue({el: '#app',data: {className: 'active-class'}
})

对象形式

<div :class="{ active: isActive }"></div>
let vm = new Vue({el: '#app',data: {isActive: true}
})

在这个例子中,如果 isActivetruediv 元素将会有 active 类。

数组形式

你也可以使用数组形式来绑定多个类:

<div :class="[firstClass, secondClass]"></div>
let vm = new Vue({el: '#app',data: {firstClass: 'first',secondClass: 'second'}
})

绑定 style 属性

v-bind:style 或其简写 :style 用于动态地绑定 CSS 样式。它可以是字符串、对象或数组的形式。

字符串形式

<div :style="styleString"></div>
let vm = new Vue({el: '#app',data: {styleString: 'color: red; background-color: yellow;'}
})

对象形式

<div :style="{ color: activeColor, fontSize: fontSize + 'px' }"></div>
let vm = new Vue({el: '#app',data: {activeColor: 'red',fontSize: 16}
})

在这个例子中,div 的颜色将是 red,字体大小将是 16px

数组形式

你也可以将多个样式对象组合在一起:

<div :style="[baseStyles, extraStyles]"></div>
let vm = new Vue({el: '#app',data: {baseStyles: { color: 'red', fontSize: '16px' },extraStyles: { fontWeight: 'bold' }}
})

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/873933.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

WordPress杂技

WordPress杂技 WordPress页面构建器: Avada、Elementor、astra、 Elementor作为一款强大的页面构建工具。 Avada&#xff1a;是一款非常受欢迎的WordPress主题&#xff0c;它的设计理念是简洁、现代、响应式&#xff0c;Avada拥有丰富的模板和布局&#xff0c;可以轻松创建出…

多线程顺序执行

前言 现在面试中&#xff0c;不光会问力扣之类的算法&#xff0c;手撕多线程问题也被提上了日程。多线程之间的顺序执行是一个高频的面试手撕题&#xff0c;而且在实际应用中也会有用武之地。因此在这里&#xff0c;我们考虑使用不同的方式来实现多线程的顺序执行。在本文中&a…

Jackson 库简介--以及数据脱敏

Jackson 是一个流行的 Java JSON 处理库&#xff0c;它提供了将 Java 对象与 JSON 数据相互转换的功能。Jackson 的主要功能包括&#xff1a; 序列化&#xff1a;将 Java 对象转换为 JSON 字符串。反序列化&#xff1a;将 JSON 字符串转换为 Java 对象。 Jackson 提供了以下几…

C2W2.Assignment.Parts-of-Speech Tagging (POS).Part2

理论课&#xff1a;C2W2.Part-of-Speech (POS) Tagging and Hidden Markov Models 文章目录 2 Hidden Markov Models2.1 Generating MatricesCreating the A transition probabilities matrixExercise 03Create the B emission probabilities matrixExercise 04 理论课&#x…

FastAPI 学习之路(五十六)将token缓存到redis

在之前的文章中&#xff0c;FastAPI 学习之路&#xff08;二十九&#xff09;使用&#xff08;哈希&#xff09;密码和 JWT Bearer 令牌的 OAuth2&#xff0c;FastAPI 学习之路&#xff08;二十八&#xff09;使用密码和 Bearer 的简单 OAuth2&#xff0c;FastAPI 学习之路&…

Kubernetes 之 Ingress

Kubernetes 之 Ingress 定义 Ingress 可以把外部需要进入到集群内部的请求转发到集群中的一些服务上&#xff0c;从而实现把服务映射到集群外部的需要。Ingress 能把集群内 Service 配置成外网能够访问的 URL&#xff0c;流量负载均衡&#xff0c;提供基于域名访问的虚拟主机…

RabbitMQ 和 RocketMQ 的区别

RabbitMQ 和 RocketMQ 都是流行的开源消息中间件&#xff0c;它们用于在分布式系统中异步传输消息。尽管它们都实现了核心的消息队列功能&#xff0c;但它们在设计、性能、特性和使用场景上有一些关键的区别&#xff1a; 基础架构: RabbitMQ: 基于AMQP&#xff08;高级消息队列…

阵列信号处理学习笔记(二)--空域滤波基本原理

阵列信号 阵列信号处理学习笔记&#xff08;一&#xff09;–阵列信号处理定义 阵列信号处理学习笔记&#xff08;二&#xff09;–空域滤波基本原理 文章目录 阵列信号前言一、阵列信号模型1.1 信号的基本模型1.2 阵列的几何构型1.3 均匀直线阵的阵列信号基本模型 总结 前言…

HOW - React 处理不紧急的更新和渲染

目录 useDeferredValueuseTransitionuseIdleCallback 在 React 中&#xff0c;有一些钩子函数可以帮助你处理不紧急的更新或渲染&#xff0c;从而优化性能和用户体验。 以下是一些常用的相关钩子及其应用场景&#xff1a; useDeferredValue 用途&#xff1a;用于处理高优先级…

嵌入式面试总结

C语言中struct和union的区别 struct和union都是常见的复合结构。 结构体和联合体虽然都是由多个不同的数据类型成员组成的&#xff0c;但不同之处在于联合体中所有成员共用一块地址空间&#xff0c;即联合体只存放了一个被选中的成员&#xff0c;结构体中所有成员占用空间是累…

【网络】windows和linux互通收发

windows和linux互通收发 一、windows的udp客户端代码1、代码剖析2、总体代码 二、linux服务器代码三、成果展示 一、windows的udp客户端代码 1、代码剖析 首先我们需要包含头文件以及lib的一个库&#xff1a; #include <iostream> #include <WinSock2.h> #inclu…

前端页面是如何禁止被查看源码、被下载,被爬取,以及破解方法

文章目录 1.了解禁止查看,爬取原理1.1.JS代码,屏蔽屏蔽键盘和鼠标右键1.2.查看源码时,通过JS控制浏览器窗口变化2.百度文库是如何防止抓包2.1.HTPPS2.2. 动态加载为什么看不到?如何查看动态加载的内容?3.禁止复制,如果解决3.1.禁止复制原理3.2.如何破解1.了解禁止查看,爬…

使用scikit-learn进行机器学习:基础教程

使用scikit-learn进行机器学习&#xff1a;基础教程 Scikit-learn是Python中最流行的机器学习库之一。它提供了简单易用的工具&#xff0c;帮助我们进行数据预处理、模型训练、评估和预测。本文将带你通过一个基础教程&#xff0c;了解如何使用scikit-learn进行机器学习。 1.…

【模板代码】用于编写Threejs Demo的模板代码

基础模板代码 使用须知常规模板代码常规Shader模板代码 使用须知 本模板代码&#xff0c;主要用于编写Threejs的Demo&#xff0c;因为本人在早期学习的过程中&#xff0c;大量抄写Threejs/examples下的代码以及各个demo站的代码&#xff0c;所以养成了编写Threejs的demo的习惯…

SAP 采购订单 Adobe 消息输出

目录 1 简介 2 业务数据例子 3 选择增强 & 代码 1&#xff09;BADI: MM_PUR_S4_PO_MODIFY_HEADER 2&#xff09;BADI: MM_PUR_S4_PO_MODIFY_ITEM 4 自定义 Adobe form 1&#xff09;PO Master form 2&#xff09;PO form 5 前台主数据配置 6 后台配置 1&#xf…

昇思22天

CycleGAN图像风格迁移互换 CycleGAN&#xff08;循环生成对抗网络&#xff09;是一种用于在没有成对训练数据的情况下学习将图像从源域 X 转换到目标域 Y 的方法。该技术的一个重要应用是域迁移&#xff0c;即图像风格迁移。 模型介绍 模型简介: CycleGAN 来自于论文 Unpair…

掌握Rust:函数、闭包与迭代器的综合运用

掌握Rust&#xff1a;函数、闭包与迭代器的综合运用 引言&#xff1a;解锁 Rust 高效编程的钥匙函数定义与模式匹配&#xff1a;构建逻辑的基石高阶函数与闭包&#xff1a;代码复用的艺术迭代器与 for 循环&#xff1a;高效数据处理的引擎综合应用案例&#xff1a;构建一个简易…

Mybatis——一对多处理

环境搭建 与多对一相似&#xff0c;有一些地方需要改动&#xff1a; 实体类&#xff1a; Data public class Student {private int id;private String name;private int tid;} Data public class Teacher {private int id;private String name;// 一个老师拥有多个学生priv…

【LeetCode】day15:110 - 平衡二叉树, 257 - 二叉树的所有路径, 404 - 左叶子之和, 222 - 完全二叉树的节点个数

LeetCode 代码随想录跟练 Day15 110.平衡二叉树257.二叉树的所有路径404.左叶子之和222.完全二叉树的节点个数 110.平衡二叉树 题目描述&#xff1a; 给定一个二叉树&#xff0c;判断它是否是 平衡二叉树 平衡二叉树的定义是&#xff0c;对于树中的每个节点&#xff0c;其左右…

qt自定义控件(QLabel)

先创建自定义控件类painter_label 1.自定义类必须给基类传入父窗口指针 2.重写控件中的方法 3.在UI中创建一个QLabel,右键“提升为”&#xff0c;输入类名