Vue3常用指令

概念

Vue 3 中的指令是带有 v- 前缀的特殊属性,用于在 DOM 元素上应用特殊的响应式行为。指令的主要作用是当其表达式的值改变时,将某些行为响应式地应用到 DOM 上。

作用 

Vue 3 指令的核心作用是提供一种声明式的方式来操作 DOM,使开发者能够更高效、更直观地处理 DOM 交互和数据绑定。 

常用类型

  • 内容渲染指令(v-html,v-text)
  • 属性绑定指令(v-bind)
  • 事件绑定指令(v-on)
  • 条件渲染指令(v-show,v-if,v-else-if,v-else)
  • 列表渲染指令(v-for)
  • 双向绑定指令(v-model)

我们后续一个一个讲解

 v-html和v-text

v-html有点像是innerHTML,可以将数据作为HTML动态地插入到DOM元素中

v-text优点想是innerText,用于更新textContent的指令,将数据作为纯文本输入

演示代码

<style scoped>

</style>
<template>
    <div v-text="str0"></div>
    <div v-text="str1"></div>
    <div v-html="str0"></div>
    <div v-html="str1"></div>
</template>
<script setup>
    import { ref, resolveDirective } from 'vue' 
    let str0=ref("<span style='color:red' class='str0'>hello,world</span>")
    let str1=ref("hello,world")
</script>

演示结果

作用:将表达式的值解析在双标签中

不同:v-html解析标签,v-text不解析标签

 v-bind

 v-bind用于绑定HTML的属性

演示代码

<style scoped>

</style>
<template>
    <!-- 完全格式 -->
    <a v-bind:href="number">Bilibili</a><br>
    <!-- 简写 -->
    <a :href="number">Bilibili</a><br>     
</template>
<script setup>
    import { ref} from 'vue' 
    let number=ref("https://www.bilibili.com/")
</script>

演示结果

总结

属性之前加冒号,简写可以没有v-bind

v-bind:属性名="变量名"

:属性名="变量名"

 v-on

v-on是 Vue 的核心指令之一,用于监听DOM事件,并且执行对应的JavaScript代码。它是 Vue 实现交互功能的关键指令。

演示代码

<template>
    <div>
        <div>{{ Count }}</div>
        <div><button v-on:click="Add">+1</button></div>
        <div><button v-on:click="Count--">-1</button></div>
        <div><button v-on:click="Subnum(5)">-5</button></div>
        <div><button @:click="Addnum(5)">+5</button></div>
    </div>
</template>

<script setup>
import { ref } from 'vue'
let Count = ref(0)
let Add = function Add() {
    Count.value++;
}
let Subnum = function Sub(n) {
    Count.value -= n
}
let Addnum = function Add(n) {
    Count.value += n
}
</script>
<style scoped></style>

演示结果

 v-on可以简写为@

函数需要早JS下声明,必须使用函数变量

 v-show和v-if

v-if会根据表达式的真假值完全创建或销毁元素及其事件监听器和子组件

v-if还可以搭配v-else-if和v-else使用

v-show通过简单地切换 CSS的display属性来控制元素显示/隐藏

演示代码

<template>
<div>
    <div v-bind:class="Elem0" v-show="Effective"></div>
    <div v-bind:class="Elem1" v-if="Effective"></div>
</div>
</template>

<script setup>
    import { ref } from 'vue'
    let Effective=ref(false)
    let Elem0=ref("Red")
    let Elem1=ref("Green")
</script>

<style scoped>
.Red{
    background-color: red;
    height: 50px;
}
.Green{
    background-color: green;
    height: 50px;
}
</style>

 如果是true

如果是false则什么都不显示

这里的v-if和v-show都是控制元素的显示,如果显示切换的慢则用v-if,如果切换地快则用v-show  

搭配v-else-if和v-else

<template>
<div>
    <div v-if="Detection>90">优秀</div>
    <div v-else-if="Detection>60">合格</div>
    <div v-else>不及格</div>
</div>
</template>

<script setup>
    import { ref } from 'vue'
    let Detection=100
</script>

<style scoped>
</style>

演示结果

v-for

v-for是Vue.js 提供的一个指令,其主要功能是基于源数据多次渲染某个元素或者模板块。在构建列表的时候,这个指令十分常用。下面为你详细介绍它的用法、注意要点以及一些示例。

使用格式

<div v-for="(item,index) in Array">{{index}}:{{item}}</div>

Array必须使用ref 

演示代码

<template>
    <ul>
        <li v-for="(item,index) in Objarr">{{ index }}:{{item.num1}}</li>
        <li v-for="(item,index) in Objarr">{{ index }}:{{item.num2}}</li>
        <li v-for="(item,index) in Objarr">{{ index }}:{{item.num3}}</li>
        <li v-for="(,index) in Obj"> {{ Obj[index] }}</li>
        <li v-for="(item) in Array">{{ item }}</li>
    </ul>

</template>

<script setup>
    import { ref } from 'vue';
    let Array=ref([0,1,2,3,4,5,6,7])
    let Obj={
        num1:"123",
        num2:"456",
        num3:"789"
    }     
    let Objarr=ref([
        {num1:"123",num2:"456",num3:"789"},
        {num1:"123",num2:"456",num3:"789"},
        {num1:"123",num2:"456",num3:"789"},
        ])   
</script>

<style scoped>
    ul{
        color: red;
    }
</style>

v-for中的key

在 Vue.js 的v-for指令中,key是一个特殊的属性,用于给每个渲染的元素分配一个唯一标识。其核心作用是帮助 Vue.js高效地更新 DOM,以及维护组件状态

演示代码

<template>
<div class="Title">GCH的书架</div>
<div v-for="(Item,Idex) in Arr" class="Content">
    <span>{{ Item.book }}</span>
    <span>{{ Item.name }}</span>
    <button @click="Func(Idex)">删除</button>
</div>
</template>

<script setup>
    import { ref } from 'vue';
    let Func=(n)=>
    {
        if(window.confirm("Are You Sure???"))
        Arr.value.splice(n,1)
    }
    let Arr=ref([
        {id:1,name:"罗贯中",book:"西游记"},
        {id:2,name:"曹雪芹",book:"红楼梦"},
        {id:3,name:"施耐腌",book:"水浒传"},
        {id:4,name:"罗贯中",book:"三国志"}
    ])
</script>

<style>
    button{
        height: 30px;
    }
    .Content{
        display: flex;
        justify-content: space-around;
        height: 50px;
    }
    .Title{
        margin-top: 20px;
        margin-bottom: 20px;
        text-align: center;
    }
    #app{
        margin: 100px auto;
        width: 400px;
        height: 300px;
        border: solid grey;
    }
</style>

当我们删除四个当中最上层的元素时

 

这里下面三个元素的值都发生了变化,所以当需要变化元素时,vue不会移动其它元素,而是直接修改现有元素的值来实现 

但是如果加了key,就不会修改其它元素,而是直接修改

<think>嗯,用户想了解Vue3常用指令及其适用场景。首先,我需要回忆Vue3中的核心指令,然后逐一说明每个指令的作用和适用情况。Vue3指令很多,但常用的有几个,比如v-bind、v-model、v-for、v-if、v-show、v-on、v-slot、v-pre、v-once、v-memo等。 首先,v-bind用于动态绑定属性,比如绑定class、style或者组件的props。适用场景包括动态样式和传递props。然后是v-model,处理表单输入的双向绑定,适用于表单元素和自定义组件。v-for用于列表渲染,遍历数组或对象生成元素。v-if和v-show都用于条件渲染,但v-if是惰性的,适合切换不频繁的情况,而v-show通过CSS控制显示,适合频繁切换。v-on用于事件绑定,处理用户交互。v-slot用于插槽内容分发,在组件中使用插槽时很重要。v-pre和v-once用于优化,v-pre跳过编译,v-once只渲染一次。v-memo是Vue3新增的,用于缓存模板子树,优化性能。 接下来,要确保每个指令都有明确的适用场景,并且给出示例代码。例如,v-model可以用在input元素上,也可以用在自定义组件实现双向绑定。v-for需要加上key属性以便跟踪节点。v-if和v-show的区别需要解释清楚,比如v-if会销毁和重建元素,而v-show只是切换display属性。 还要注意用户可能需要区分Vue2和Vue3的不同,比如在Vue3中v-model的变更,比如.sync修饰符被合并到v-model中,所以自定义组件可能需要使用多个v-model。另外,v-for中的key的重要性需要强调,避免渲染问题。 然后,考虑用户可能的后续问题,比如指令的修饰符,比如v-model的.lazy、.trim,v-on的.stop、.prevent等。或者自定义指令的创建和使用,这也是Vue3的一部分,但用户可能没有问到,所以在相关问题中可以提出来。 最后,检查是否有遗漏的常用指令,比如v-text、v-html,但可能这些不如前面提到的常用,或者用户可能更关注核心指令。不过v-html有安全风险,可能需要提到适用场景但谨慎使用。 现在需要组织语言,分点回答,每个指令的名称、用途、示例代码、适用场景,然后相关问题应该围绕这些指令的深入使用、区别、修饰符或自定义指令等。</think><< Vue3 常用指令及适用场景如下(带示例代码): 1. **v-bind** - **用途**:动态绑定属性或组件props - **场景**:动态样式、props传递、属性绑定 ```vue <!-- 动态class绑定 --> <div :class="{ active: isActive }"></div> <!-- 绑定组件props --> <Child :title="pageTitle" /> ``` 2. **v-model** - **用途**:表单元素/组件的双向数据绑定 - **场景**:表单输入、自定义组件双向绑定 ```vue <input v-model="message"> <!-- 自定义组件 --> <CustomInput v-model:title="bookTitle" /> ``` 3. **v-for** - **用途**:列表渲染 - **场景**:数组/对象遍历、动态生成列表 ```vue <li v-for="(item, index) in items" :key="item.id"> {{ index }} - {{ item.text }} </li> ``` 4. **v-if / v-else-if / v-else** - **用途**:条件渲染 - **场景**:需要完全销毁/重建元素的场景 ```vue <div v-if="type === &#39;A&#39;">A</div> <div v-else-if="type === &#39;B&#39;">B</div> <div v-else>Other</div> ``` 5. **v-show** - **用途**:通过CSS切换显示 - **场景**:频繁切换可见性(性能优于v-if) ```vue <div v-show="isVisible">Toggle Me</div> ``` 6. **v-on** - **用途**:事件监听 - **场景**:用户交互处理 ```vue <button @click="handleClick">Click</button> <!-- 修饰符示例 --> <form @submit.prevent="onSubmit"></form> ``` 7. **v-slot** - **用途**:定义插槽内容 - **场景**:组件插槽内容分发 ```vue <template v-slot:header> <h1>Header Content</h1> </template> ``` 8. **v-pre** - **用途**:跳过编译 - **场景**:显示原始Mustache标签 ```vue <div v-pre>{{ 这里不会被编译 }}</div> ``` 9. **v-once** - **用途**:一次性渲染 - **场景**:优化静态内容 ```vue <span v-once>{{ 只会渲染一次的值 }}</span> ``` 10. **v-memo** (Vue3新增) - **用途**:缓存模板子树 - **场景**:大数据量列表性能优化 ```vue <div v-for="item in list" :key="item.id" v-memo="[item.id === selected]"> {{ item.name }} </div> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值