【Vue3 知识第三讲】模板语法、Vue3指令

一、模板语法

插值表达式 {{ data }} 可以用于渲染 Vue 中提供的数据。

数字化管理平台
Vue3+Vite+VueRouter+Pinia+Axios+ElementPlus
权限系统-商城
个人博客地址

<script setup>import {ref} from "vue"const message = ref("Hello Vue3!!")const num = ref(10)
</script>
<template><div class="message">{{message}} ~ {{num + 10}}</div><div>{{ ok ? 'YES' : 'NO' }}</div><div>{{ message.split('').reverse().join('') }}</div>
</template>
<style lang="scss" scoped>
.message {color: red;font-weight: bold;font-family: "楷体","MicroSoft Yahei";
}
</style>

注:vue中的插值提供了真正的js环境,因此我们可以直接使用 JS 表达式

二、基础指令

2.1 概述

  • 指令是什么

    指令就是一个自定义属性,Vue中的指令都是以 v- 开头

  • {{}} 插值表达式渲染页面闪烁问题

    代码加载的时候先加载 HTML 把插值语法当做 HTML 内容加载到页面上 当加载完 js 后才把插值语法替换掉 所以我们会看到闪烁问题

  • v-cloak 指令解决插值语法的闪烁问题

    原理:先隐藏,替换好值之后再显示最终的值

    //CSS中提供样式设置
    [v-cloak] {display: none;
    }//在插值表达式标签中添加v-cloak指令
    <div id="app" v-cloak>{{ title }} === {{ num + 10 }}</div>
    

2.2 基础指令

  • v-text 更新元素的文本内容

    v-text 通过设置元素的 textContent 属性来工作,因此它将覆盖元素中所有现有的内容。如果想要替换指定的部分内容,请使用插值表达式(mustache interpolations)代替。

    <span v-text="msg"></span>
    <!-- 等同于 -->
    <span>{{msg}}</span>
    
  • v-html 更新元素的 innerHTML

    v-html 的内容直接作为普通 HTML 插入—— Vue 模板语法是不会被解析的。如果你发现自己正打算用 v-html 来编写模板,不如重新想想怎么使用组件来代替。

    <p>Using text interpolation: {{ rawHtml }}</p>
    <p>Using v-html directive: <span v-html="rawHtml"></span></p>
    

    在你的站点上动态渲染任意的 HTML 是非常危险的,因为它很容易导致 XSS 攻击。请只对可信内容使用 HTML 插值,绝不要将用户提供的内容作为插值。

  • v-once 仅渲染元素和组件一次,并跳过之后的更新

    执行一次性的插值(当数据改变时,插值处的内容不会继续更新)

    应用场景:显示的信息后续不需要再修改,可以使用 v-once 指令来提高性能

    <!-- 单个元素 -->
    <span v-once>This will never change: {{msg}}</span>
    <!-- 带有子元素的元素 -->
    <div v-once><h1>comment</h1><p>{{msg}}</p>
    </div>
    <!-- 组件 -->
    <MyComponent v-once :comment="msg" />
    <!-- `v-for` 指令 -->
    <ul><li v-for="i in list" v-once>{{i}}</li>
    </ul>
    
  • v-pre 跳过该元素及其所有子元素的编译

    元素内具有 v-pre,所有 Vue 模板语法都会被保留并按原样渲染。最常见的用例就是显示原始双大括号标签及内容。

    <span v-pre>{{ this will not be compiled }}</span>
    

- v-memo 期望的绑定值类型(了解)

Vue3.2版本新增指令。期望的绑定值类型:any[]

缓存一个模板的子树。在元素和组件上都可以使用。为了实现缓存,该指令需要传入一个固定长度的依赖值数组进行比较。如果数组里的每个值都与最后一次的渲染相同,那么整个子树的更新将被跳过。

<div v-memo="[valueA, valueB]">...
</div>

当组件重新渲染,如果 valueAvalueB 都保持不变,这个 `` 及其子项的所有更新都将被跳过。实际上,甚至虚拟 DOM 的 vnode 创建也将被跳过,因为缓存的子树副本可以被重新使用。

正确指定缓存数组很重要,否则应该生效的更新可能被跳过。v-memo 传入空依赖数组 (v-memo="[]") 将与 v-once 效果相同。

**v-memo 仅用于性能至上场景中的微小优化,应该很少需要。**最常见的情况可能是有助于渲染海量 v-for 列表 (长度超过 1000 的情况):

<div v-for="item in list" :key="item.id" v-memo="[item.id === selected]"><p>ID: {{ item.id }} - selected: {{ item.id === selected }}</p><p>...more child nodes</p>
</div>

当组件的 selected 状态改变,默认会重新创建大量的 vnode,尽管绝大部分都跟之前是一模一样的。v-memo 用在这里本质上是在说“只有当该项的被选中状态改变时才需要更新”。这使得每个选中状态没有变的项能完全重用之前的 vnode 并跳过差异比较。注意这里 memo 依赖数组中并不需要包含 item.id,因为 Vue 也会根据 item 的 :key 进行判断。

当搭配 v-for 使用 v-memo,确保两者都绑定在同一个元素上。v-memo 不能用在 v-for 内部。

v-memo 也能被用于在一些默认优化失败的边际情况下,手动避免子组件出现不需要的更新。但是一样的,开发者需要负责指定正确的依赖数组以免跳过必要的更新。

<script setup>const arr = [1,2,3]
</script>
<template>// 这里 v-memo 条件成立的话跳过更新<div v-for="item in arr" v-memo="[item == 2]"></div>
</template>

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

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

相关文章

leetcode 1859.将句子排序

⭐️ 题目描述 &#x1f31f; leetcode链接&#xff1a;将句子排序 代码&#xff1a; class Solution { public:string sortSentence(string s) {vector<string> record;record.resize(9);string curString;for (auto val : s) {if (isdigit(val)) {record[ val - 0 - …

CentOS ARM 部署 kubernetes v1.24.6

1.背景 之前安装的kubernetes版本为v1.19.0 树莓派使用(CentOS7.9 armv71 Kubernetes1.19.0), 由于版本过低&#xff0c;一些HPA相关的功能支持不是特别好&#xff0c;因此需要将版本升级&#xff0c;本次会将版本升级为v1.24.6. 2. 如何upgrade 2.1. 优雅升级 kubeadm自带…

嵌入式软件中如何排查bug?

明确Bug现象&#xff1a;要准确描述Bug出现的场景、现象,能复现就最好。 查看日志信息&#xff1a;嵌入式系统日志可以帮助定位问题,看是否有报错、异常信息。 用仿真工具调试&#xff1a;许多嵌入式芯片都有相应的仿真调试工具,可以在仿真环境下单步跟踪、查看变量值等。 加…

Collections和CollectionUtils集合操作

0.引入依赖 <dependency><groupId>org.apache.commons</groupId><artifactId>commons-collections4</artifactId><version>4.4</version> </dependency> 一.Collections用法&#xff1a; 01、排序操作 reverse(List list)…

肖sir__设计测试用例方法之判定表06_(黑盒测试)

设计测试用例方法之判定表 1、判定表&#xff1a;是一种表达逻辑判断的工具。 2、判定表&#xff1a;包含四部分 1&#xff09;条件桩&#xff08;condition stub&#xff09;:列出问题的 所有条件&#xff08;通常条件次序无关紧要&#xff09;。 2&#xff09;条件项&#x…

海底光缆走线逻辑

Submarine Cable Map 电信公司Telegeography每年都会发布其海底电缆地图的新版本。这张地图显示了在世界各地传输数据的所有海底电信电缆。2023 年海底电缆地图现已推出。

测试用例执行进度跟踪的六大方法

软件测试的重要环节之一是跟踪和管理测试用例的执行进度。良好的测试用例执行进度管理&#xff0c;可以确保测试更加完善全面&#xff0c;发现更多问题&#xff0c;保证软件质量。一般有这么几种常用的测试用例执行进度跟踪方法: 测试用例管理工具 这种工具如TestLink&#xf…

国产10米分辨率的卫星介绍、下载和处理教程

10米分辨率的资源卫星介绍、下载和处理教程 简介 说起免费的10米分辨率卫星影像,大家首先想到的是sentinel卫星。但其实还有我国的中巴地球资源卫星04星(CBERS04)。 中巴地球资源卫星(China Brazil Earth Resources Satellite, CBERS)是中国和巴西共同投资、联合研制的地球…

滑动窗口实例6(找到字符串中所有字母异位词)

题目&#xff1a; 给定两个字符串 s 和 p&#xff0c;找到 s 中所有 p 的 异位词 的子串&#xff0c;返回这些子串的起始索引。不考虑答案输出的顺序。 异位词 指由相同字母重排列形成的字符串&#xff08;包括相同的字符串&#xff09;。 示例 1: 输入: s "cbaebabac…

前端实现动态路由(后端返回权限路由)

实现思路 1、前端定义静态路由&#xff08;login登录页这种不需要权限的默认路由&#xff09; 2、用户登陆时调接口获取用户信息&#xff0c;然后登录到首页 3、前后端定义好路由返回的格式 4、在路由导航钩子beforeEach中去调接口获取动态路由&#xff0c;递归处理该数据为前…

列表、元组、字典、集合

列表&#xff1a;Python 中没有数组&#xff0c;而是加入了功能更强大的列表&#xff08;list&#xff09;&#xff0c;列表可以存储任何类型的数据&#xff0c;同一个列表中的数据类型还可以不同&#xff1b;列表是序列结构&#xff0c;可以进行序列结构的基本操作&#xff1a…

QT中闹钟的设置

.h文件 #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QPushButton> //按钮 #include <QTextEdit> //文本 #include <QLabel> //标签 #include <QLineEdit> //行编辑器#include <QTimerEvent> //定时器事件类头文件 #…

基于ssm+vue舞蹈网站的设计与实现

基于ssmvue舞蹈网站的设计与实现111 开发工具&#xff1a;idea 数据库mysql5.7 数据库链接工具&#xff1a;navcat,小海豚等 技术&#xff1a;ssm 摘 要 随着科学技术的飞速发展&#xff0c;社会的方方面面、各行各业都在努力与现代的先进技术接轨&#xff0c;通过科技…

介绍几个搜索引擎

Google&#xff1a;全球最大的搜索引擎&#xff0c;提供全面的搜索服务&#xff0c;包括网页、图片、视频、新闻、地图等。 Baidu&#xff1a;中国最大的搜索引擎&#xff0c;提供类似于Google的全面搜索服务&#xff0c;同时也有网盘、知道等功能。 Bing&#xff1a;微软公司…

数学建模--G(1,1)型的灰色预测模型的Python实现

目录 1.算法适用情况 2.算法推演步骤 3.算法核心代码 4.算法效果展示 1.算法适用情况 #1.灰色预测模型简介 """ 1.灰色预测是对既含有已知信息又含有不确定信息的系统进行预测&#xff0c;就是对在一定范围内变化的、与时间有关的灰色过程进行预测。 2.灰色预测…

python 之import与from import 导入库的解析与差异

文章目录 1. **使用import导入整个模块**&#xff1a;2. **使用from import导入特定内容**&#xff1a;注意事项别名的使用 在Python中&#xff0c;import和from import是用于导入模块中内容的两种不同方式。下面详细介绍它们的用法和差异&#xff1a; 1. 使用import导入整个模…

java基础-----第九篇

系列文章目录 文章目录 系列文章目录前言一、GC如何判断对象可以被回收前言 一、GC如何判断对象可以被回收 引用计数法:每个对象有一个引用计数属性,新增一个引用时计数加1,引用释放时计数减1,计 数为0时可以回收, 可达性分析法:从 GC Roots 开始向下搜索,搜索所走过的…

htmx-使HTML更强大

‍本文作者是360奇舞团开发工程师 htmx 让我们先来看一段俳句: javascript fatigue: longing for a hypertext already in hand 这个俳句很有意思&#xff0c;是开源项目htmx文档中写的&#xff0c;意思是说&#xff0c;我们已经有了超文本&#xff0c;为什么还要去使用javascr…

Win7系统电脑开机总出现硬盘自检的简单解决方法

你是不是经常会遇到电脑开机进行硬盘自检&#xff0c;而且每次开机都检查很久不能跳过&#xff1b;怎么才能跳过这一步骤呢&#xff1f;下面教大家如何让Win7系统电脑在开机的时候跳过硬盘自检这一步骤&#xff0c;加快开机时间。 解决步骤&#xff1a; 1、按下“Win R”快捷键…

Java【手撕滑动窗口】LeetCode 438. “字符串中所有异位词“, 图文详解思路分析 + 代码

文章目录 前言一、字符串中所有异位词1, 题目2, 思路分析2.1, 引入哈希表找出异位词2.2, 引入变量记录"有效字符的个数"2.3, left 右移维护窗口2.4, 总结核心步骤 3, 代码 前言 各位读者好, 我是小陈, 这是我的个人主页, 希望我的专栏能够帮助到你: &#x1f4d5; Ja…