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

这篇具有很好参考价值的文章主要介绍了【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 也能被用于在一些默认优化失败的边际情况下,手动避免子组件出现不需要的更新。但是一样的,开发者需要负责指定正确的依赖数组以免跳过必要的更新。文章来源地址https://www.toymoban.com/news/detail-691665.html

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

到了这里,关于【Vue3 知识第三讲】模板语法、Vue3指令的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 【vue3】基础知识点-setup语法糖

    【vue3】基础知识点-setup语法糖

    学习vue3,都会从基础知识点学起。了解setup函数,ref,recative,watch、comptued、pinia等如何使用 今天说vue3组合式api,setup函数 在学习过程中一开始接触到的是这样的,定义数据且都要通过return返回 最新接触到的是这样的 两种不同的写法,那区别是什么呢? 其实在script标签上直

    2024年02月13日
    浏览(12)
  • Vue前端框架08 Vue框架简介、VueAPI风格、模板语法、事件处理、数组变化侦测

    渐进式JavaScript框架,易学易用,性能出色,适用场景丰富的Web前端框架 功能是构建用户界面 基于标准的HTML、CSS和JavaScript,提供了一套声明式的、组件化的编程模型,帮助高效得开发用户界面 1.1渐进式框架 渐进式框架:Vue是一个框架也是一个生态,功能覆盖了大部分前端的

    2024年02月09日
    浏览(12)
  • 【前端】VUE3使用$ref()糖语法 去除.value

    Reactivity Transform | Vue Macros (sxzz.moe)

    2024年02月12日
    浏览(32)
  • #vue3 实现前端下载excel文件模板功能

    #vue3 实现前端下载excel文件模板功能

    一、需求: 前端无需通过后端接口,即可实现模板下载功能。 通过构造一个 JSON 对象,使用前端常用的 第三方库 xlsx ,可以直接将该 JSON 对象转换成 Excel 文件,让用户下载模板 二、效果: 三、源码如下:

    2024年01月19日
    浏览(66)
  • 若依前端Vue3模板——自定义主题+炫彩主题

    若依前端Vue3模板——自定义主题+炫彩主题

    实现结果 实现步骤 默认主题的设置 文件位置: src/settings.js 布局设置 图标文件 文件位置: src/assets/images/blue.svg 复制同级的 light.svg 修改名称即可,将两个颜色替换为:#409eff 布局组件 文件位置: src/layout/components/Settings/index.vue template模板中添加控件如下 新增一个主题风格选

    2024年02月14日
    浏览(38)
  • csdn新星计划vue3+ts+antd赛道——利用inscode搭建vue3(ts)+antd前端模板

    csdn新星计划vue3+ts+antd赛道——利用inscode搭建vue3(ts)+antd前端模板

    大家好,我是yma16,本文分享利用inscode搭建vue3(ts)+antd前端模板。 2023 新星计划 vue(ts)+antd赛道报名入口:https://bbs.csdn.net/topics/616574177 搭建vue3+ts+antd的指引:认识vite_vue3 初始化项目到打包 InsCode 是一个一站式的软件开发服务平台,从开发-部署-运维-运营,都可以在 InsCode 轻松

    2024年02月16日
    浏览(11)
  • Vue3+SpringBoot快速开发模板

    Vue3+SpringBoot快速开发模板

    起因:个人开发过程经常会使用到Vue3+SpringBoot技术栈来开发项目,每次在项目初始化时都需要涉及一些重复的整理工作,于是结合一些个人觉得不错的前后端模板进行整合,打通一些大多数项目都需要的实现的基础功能,以便于快速开发项目。代码已按个人力所能及的规范编

    2024年02月14日
    浏览(16)
  • 前端Vue3框架知识点大全

    Vue.js是一种流行的JavaScript前端框架,它的第三个版本Vue3带来了许多令人兴奋的新特性和改进。 1、响应式数据 : Vue 3采用了基于Proxy的响应式系统,相比Vue 2中的Object.defineProperty,Proxy提供了更强大和灵活的拦截器,可以捕获对象的各种操作。这使得Vue 3的响应式系统更加高效

    2024年02月11日
    浏览(15)
  • Vue3+Vite前端知识汇总1篇

    Vue3+Vite前端知识汇总1篇

       目录 1、设置package.json,让编译完成后自动打开浏览器。 2、设置vite.config.ts,设置src别名,后面就不用 ../../../ 了。 3、安装@types/node  解决vscode显示红波浪线问题。  4、安装 sass和reset.css 5、创建并引入全局组件,HospitalTop 6、安装路由,并添加切换路由后滚动到顶部功能

    2024年02月16日
    浏览(36)
  • Vue3前端100个必要的知识点

    Vue3前端100个必要的知识点

    为什么是必要的,就是这100个知识点学完后,能独立完成一个小项目。最终能得到一个解决方案。也算是前端知识的积累。如果后面有需要的地方可以回来查。100个其实比较多,我会按新手老鸟,大神来分成3个等级,话不多说,让我们开始吧。     目录 1、一些常用的依赖。

    2024年02月06日
    浏览(12)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包