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

news2024/11/13 12:56:55

文章目录

  • 一,插值表达式
    • 注意事项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.coloradmin.cn/o/1939246.html

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

相关文章

论文阅读:Speculative RAG: Enhancing Retrieval Augmented Generation through Drafting

论文地址&#xff1a;https://arxiv.org/abs/2407.08223 RAG 将 LLM 的生成能力与外部知识源相结合&#xff0c;以提供更准确和最新的响应。最近的 RAG 进展侧重于通过迭代 LLM 完善或通过 LLM 的额外指令调整获得自我批判能力来改进检索结果。在这项工作中&#xff0c;作者介…

MySQL:JOIN 多表查询

多表查询 在关系型数据库中&#xff0c;表与表之间是有联系的&#xff0c;它们通过 外键 联系在一起&#xff0c;所以在实际应用中&#xff0c;经常使用多表查询。多表查询就是同时查询两个或两个以上的表。 MySQL多表查询是数据库操作中非常重要的一部分&#xff0c;它允许你…

《从C/C++到Java入门指南》- 17.命令行参数

命令行参数 一直写代码的童鞋可能留意到了&#xff0c;main函数中会传入一个String args[]的字符串数组。 这个数组由JVM接收用户输入并传给main函数。 import java.util.*; public class Main {public static void main(String[] args) {for (String arg : args) {System.out…

[Redis]典型应用——缓存

什么是缓存 缓存&#xff08;Cache&#xff09;是一种用于临时存储数据的机制&#xff0c;目的是提高数据访问速度和系统性能。 核心思路就是把一些常用的数据放到触手可及(访问速度更快)的地方&#xff0c;方便随时读取 缓存是一个相对的概念&#xff0c;比如说&#xff0c…

[CSS] 浮动布局的深入理解与应用

文章目录 浮动的简介元素浮动后的特点解决浮动产生的影响浮动后的影响解决浮动产生的影响 浮动相关属性实际应用示例示例1&#xff1a;图片与文字环绕示例2&#xff1a;多列布局示例3&#xff1a;响应式布局 总结 浮动布局是CSS中一种非常强大的布局方式&#xff0c;最初设计用…

as是python关键字吗

关键字as的作用把紧跟其后的对象代替其前方的一个对象&#xff0c;其作用效果如下所示&#xff1a; import scrapy as tools 这个表达式中就是在当前这个模块中&#xff0c;使用tools可以代替scrapy&#xff0c;相当于C中的宏定义。在该as作用域中&#xff0c;可以使用tools来代…

STM32CubeIDE工程编译提示“has a LOAD segment with RWX permissions”解决办法

0 问题描述 使用STM32CubeIDE进行STM32MP135的开发时&#xff0c;编译过程打印了如下警告&#xff1a; 描述&#xff1a;has a LOAD segment with RWX permissions1 解决办法 右键工程&#xff0c;依次点击Properties->C/C Build->Settings->MCU GCC Linker->M…

如何将PDF转换成可以直接编辑的CAD图纸?

PDF图纸是为了让用户更好的阅览CAD文件&#xff0c;但是&#xff0c;当我们想要对其进行编辑的时候&#xff0c;PDF图纸就是一个麻烦了。那么PDF转换成CAD后可以编辑吗&#xff1f;如何将PDF转换成可以直接编辑的CAD图纸呢&#xff1f;本篇给你答案。 1、启动迅捷CAD编辑器&…

vcs+verdi搭建基础仿真的版本V1

2024-7-20 数字软件安装&#xff0c;仿真环境测试 dut重新修改 makefile重新修改 verdi整合完成 dut.v module dut ( );reg clk;initial beginclk 0;forever begin#10 clk ~clk;endendinitial begin$fsdbDumpfile("verilog.fsdb");$fsdbDumpvars();$vcdpluson;$…

WAAP安全防护能力

利用传统安全漏洞发动攻击的难度不断提升&#xff0c;攻击者的重心从传统的应用漏洞转向无明显攻击特征&#xff0c;模拟合法业务操作的自动化攻击。Web应用程序和API面临众多攻击场景&#xff0c;根据国内的情况进行汇总分析&#xff0c;主要分为恶意爬虫防护、安全攻击防护、…

电脑显示mfc140u.dll丢失的修复方法,总结7种有效的方法

mfc140u.dll是什么&#xff1f;为什么电脑会出现mfc140u.dll丢失&#xff1f;那么mfc140u.dll丢失会给电脑带来什么影响&#xff1f;mfc140u.dll丢失怎么办&#xff1f;今天详细给大家一一探讨一下mfc140u.dll文件与mfc140u.dll丢失的多种不同解决方法分享&#xff01; 一、mfc…

【Espressif-ESP32S3】【VScode】安装【ESP-IDF】插件及相关工具链

一、ESP-IDF简介 二、VScode安装ESP-IDF插件 三、安装ESP-IDF、ESP-IDF-Tools以及相关工具链 四、测试例程&编译烧录 五、IDF常用指令 资料下载&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/15Q2rl2jpIaKfj5rATkYE6g?pwdGLNG 提取码&#xff1a;GLNG 一、ESP-…

Linux 文件安装的mysql 启动

1、找到my.cnf 2、确定文件类容&#xff1a; 并确保这些重要的配置&#xff1a;basedir 、datadir、socket 文件或目录都存在 3、找到mysqld 位置 4、启动mysqld mysqld --defaults-file/etc/my.cnf --usermysql

Codeforces Round 960 (Div. 2)

文章目录 题目链接A. Submission BaitB. Array CraftC. Mad MAD Sum 题目链接 点击跳转codeforces A. Submission Bait 这是一道博弈题&#xff0c;比较简单&#xff0c;但是赛时直接就WA了两发&#xff0c;刚开始把题想简单了&#xff0c;第二发没有考虑清楚。  题意&#…

【云原生】Prometheus 服务自动发现使用详解

目录 一、前言 二、Prometheus常规服务监控使用现状​​​​​​​ 2.1 Prometheus监控架构图 2.2 Prometheus服务自动发现的解决方案 三、Prometheus服务自动发现介绍 3.1 什么是Prometheus服务自动发现 3.2 Prometheus自动服务发现策略 3.3 Prometheus自动服务发现应用…

又缩水Unity7月闪促限时4折活动模块化角色模板编辑器场景美术插件拖尾怪物3D模型UI载具AI对话TPS飞机RPG和FPS202407

Flash Deals are Coming Back! 限时抢购又回来了&#xff01; July 17, 2024 8:00:00 PT to July 24, 2024 7:59:00 PT 太平洋时间 2024 年 7 月 17 日 8&#xff1a;00&#xff1a;00 至 2024 年 7 月 24 日 7&#xff1a;59&#xff1a;00&#xff08;太平洋时间&#xff09;…

ThreadX打印tick(时钟滴答)方法

0 工具准备 ThreadX V6.2.0 1 ThreadX打印tick&#xff08;时钟滴答&#xff09;方法 int ostick(void) {printf("tick : %lu\r\n", _tx_time_get());return 0; }打印效果展示&#xff1a;

240717.LeetCode——2974.最小数字游戏

题目描述 你有一个下标从 0 开始、长度为 偶数 的整数数组 nums &#xff0c;同时还有一个空数组 arr 。Alice 和 Bob 决定玩一个游戏&#xff0c;游戏中每一轮 Alice 和 Bob 都会各自执行一次操作。游戏规则如下&#xff1a; 每一轮&#xff0c;Alice 先从 nums 中移除一个 …

[译] Rust项目的基础设施

本篇是对 RustConf 2023中的Infrastructure for Rust这一视频的翻译与整理, 过程中为符合中文惯用表达有适当删改, 版权归原作者所有. 我今天要和大家讨论支持Rust及Rust项目的基础设施。Rust是一门令人惊叹的语言,我非常喜欢它,看到它的普及度和社区的成长令人非常满意。但从项…

电力需求预测挑战赛笔记 Task3 #Datawhale AI 夏令营

上文&#xff1a; 电力需求预测挑战赛笔记 Task2 #Datawhale AI 夏令营-CSDN博客文章浏览阅读80次。【代码】电力需求预测挑战赛笔记 Task2。https://blog.csdn.net/qq_23311271/article/details/140360632 前面我们介绍了如何使用经验模型以及常见的lightgbm决策树模型来解决…