VUE指令

这篇文章详细介绍了Vue.js中的核心指令,包括v-text和textContent的区别,v-html的innerHTML操作,v-show和v-if的条件渲染策略,v-for的循环渲染,以及事件绑定v-on和v-bind/v-model的使用。还提到了v-slot用于插槽定义,v-pre跳过编译,v-once单次渲染,以及v-cloak防止未编译模板闪现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这是一篇整合vue指令的博客。


v-text:

更新元素的文本内容。

官方文档:通过设置元素的 textContent 属性来工作,因此它将覆盖元素中所有现有的内容。如果你需要更新 textContent 的部分,应该使用 文本插值(  {{}}  ) 代替。

<span v-text="msg"></span>
<!-- 等同于 -->
<span>{{msg}}</span>

自述:

textContent返回一个字符串或null。通过JS来操作,解析标签,将内容渲染

<div id="divA">This is <span>some</span> text!</div>

关于以上html代码:

let text = document.getElementById('divA').textContent;

可得到:

This is some text!

v-html:

更新元素的 innerHTML

v-html 的内容直接作为普通 HTML 插入HTML结构。

<div v-html="'<h1>Hello World</h1>'"></div>
把h1标签及其内容插入div标签中

开发中要注意:

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

2.在单文件组件,scoped 样式将不会作用于 v-html 里的内容,因为 HTML 内容不会被 Vue 的模板编译器解析。如果你想让 v-html 的内容也支持 scoped CSS,你可以使用 CSS modules 或使用一个额外的全局 <style> 元素。


v-show:

基于表达式值的真假性,来改变元素的可见性。

通过修改CSS的display属性,来进行组件的显示与隐藏。

v-show的表达式真假改变并不会引起页面的 reflow重新渲染,因为它会在DOM一直保留此元素(不论是否被显示在页面)

<h1 v-show=“表达式” >Hello!</h1>

注:v-show 不支持在 <template> 元素上使用,也不能和 v-else 搭配使用。


v-if:

基于表达式值的真假性,来条件性地渲染元素或者模板片段。

当 v-if 元素被触发,元素及其所包含的指令/组件都会销毁和重构。如果初始条件是假,那么其内部的内容根本都不会被渲染。

这里与v-show的使用方式类似,不同点就是v-show会将元素保留到DOM渲染中。

而v-if的真假性改变,则会引起每次重新渲染或者销毁元素,该元素不会被保留在DOM渲染中。

<h1 v-if="表达式">Vue</h1>

v-if,v-else-if,v-else:

与我们常用判断语句语法相同,三种指令构成一个区块。

<h1 v-if="表达式==1">AAA</h1>
<h1 v-else-if="表达式==2">BBB</h1>
<h1 v-else>CCC</h1>
表达式为1 渲染AAA 
表达式为2 渲染BBB
表达式为其他 渲染CCC 


v-for:

基于原始数据多次渲染元素或模板块。

<div v-for="item in items" :key="item.id">
  {{ item.text }}
</div>

=========================================
items : [
    {id:1,text:111},
    {id:2,text:222},
    {id:3,text:333},
    {id:4,text:444}
]

遍历传入的 items数组/对象等,将内容全部渲染。

以上代码便会渲染出4个div标签,标签内容分别为 111 222 333 444 

这里的key是指定一个唯一标识,为了给 Vue 一个提示,以便它可以跟踪每个节点的标识,从而重用和重新排序现有的元素,你需要为每个元素对应的块提供一个唯一的 key。

如果你的数据里面没有唯一标识,可以用下标index来代替。

v-for="(item,index) in items" :key="index"


v-on:

给元素绑定事件监听器,可以缩写成@

<button v-on:click="doThis"></button>

<button @click="doThis"></button>

当用于普通元素,只监听原生DOM。当用于自定义元素组件,则监听子组件触发的自定义事件

当监听原生 DOM 事件时,方法接收原生事件作为唯一参数。如果使用内联声明,声明可以访问一个特殊的 $event 变量:v-on:click="handle('ok', $event)"

回调函数可以通过event参数访问到原生事件的内容。

关于修饰符就不过多介绍。


v-bind与v-model:

内容比较多,参阅。


v-slot:

1.用于声明具名插槽,给插槽取一个名字

<template v-slot:header>
    Header content
  </template>

2.期望接收 props 的作用域插槽

<Mouse v-slot="{ x, y }">
  Mouse position: {{ x }}, {{ y }}
</Mouse>

 具体请查看 文章


v-pre:

跳过该元素及其所有子元素的编译。

可以利用它跳过:没有使用指令语法、没有使用插值语法的节点,会加快编译+

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

 如上内容会显示为:{{ this will not be compiled }}


 v-once:

仅渲染元素和组件一次,并跳过之后的更新。在随后的重新渲染,元素/组件及其所有子项将被当作静态内容并跳过渲染。这可以用来优化更新时的性能。

<span v-once>This will never change: {{msg}}</span>

 只会渲染一次span标签及其子元素 之后会把里面的内容作为静态内容 不会再渲染/更新数据。


v-cloak:

用于隐藏尚未完成编译的 DOM 模板。

当使用直接在 DOM 中书写的模板时,可能会出现一种叫做“未编译模板闪现”的情况:用户可能先看到的是还没编译完成的双大括号标签,直到挂载的组件将它们替换为实际渲染的内容。

我们在发送网络请求获取页面时,可能会出现渲染缓慢的情况,导致页面闪现。

这里就可以用v-cloak标签,让被渲染中的元素隐藏 ,待完成渲染后显示。

<div v-cloak>
  {{ message }}
</div>

直到编译完成前,<div> 将不可见。


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

热情且勇敢、

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值