指令式Vue提供的带有v-前缀的特殊标签属性,用来增强标签的能力。可以提高数据的渲染能力。
Vue3中的指令按照不同的用途可以分为如下的6大类。
内容渲染指令是 Vue 中用于将数据动态渲染到页面上的指令
语法<p v-test='表达式'></p>
可以将表达式的内容渲染到p标签中,类似原生JS中的innerText,使用该语法,会覆盖p标签中的原有内容。
语法<p v-html='表达式'></p>
作用和v-text类似,不同的是v-html可以把html标签渲染出来。
<template>
<div>
<div v-text="msg"></div>
<div v-html="msg"></div>
</div>
</template>
<script setup>
const msg = '<h1>Hello World</h1>'
</script>
<style scoped>
</style>
注意:v-text不解析标签、v-html会解析标签。
属性绑定指令主要是 v-bind,用于将元素的属性与 Vue 实例中的数据进行绑定,实现属性的动态变化。
语法:
v-bind:属性名="表达式"
可简写
:属性名="表达式"
<template>
<div>
<a v-bind:href="url">百度一下</a> <br>
<!-- 简写 -->
<a :href="url">百度一下</a>
</div>
</template>
<script setup>
import { ref } from 'vue';
const url = ref('http://www.baidu.com')
</script>
<style scoped>
</style>
事件绑定指令主要是 v-on,用于监听 DOM 事件并执行对应的方法。
语法:
<button v-on:事件名="内联语句">按钮</button>
<button v-on:事件名="处理函数">按钮</button>
<button v-on:事件名="处理函数(实参列表)">按钮</button>
v-on
可以简写为@
<template>
<div>
<p>{{ count }}</p>
<button v-on:click="count++">+1</button> <br>
<button v-on:click="increase">+1</button> <br>
<button v-on:click="add(3)">+3</button><br>
<button @click="add(5)">+5</button>
</div>
</template>
<script setup>
import { ref } from 'vue';
const count = ref(0)
const increase = ()=>{
count.value++
}
const add = (a)=>{
count.value+=a
}
</script>
<style scoped>
</style>
条件渲染指令用于根据表达式的真假动态决定元素是否渲染在页面上
控制元素显示与隐藏
语法:v-show="布尔表达式"
为true显示,false不显示
原理:切换display:none
作用与频繁切换显示隐藏的场景。
控制元素显示隐藏,不同的是这个是控制元素的创建和移除。
语法:v-if="布尔表达式"
为true显示,false不显示
作用与要么显示,要么隐藏的场景
辅助v-if进行判断渲染
语法:v-else v-else-if="表达式"
需要紧挨着v-if
使用
<template>
<div>
<div v-show="visibel">看见我</div>
<div v-if="num>90">优秀</div>
<div v-else-if="num>=70">优秀</div>
<div v-else>优秀</div>
</div>
</template>
<script setup>
import {ref} from 'vue'
const visibel = ref(true)
const num = ref(100)
</script>
<style scoped>
</style>
v-show是通过控制css的display属性 v-if直接从DOM树上移除或者创建;并且v-if还可以配合v-else-if/v-else进行多分支条件渲染。
Vue 的列表渲染指令是 v-for,用于根据数组或对象的数据生成对应数量的元素。
v-for指令需要使用(item,index) in 目标结构形式的特殊语法,其中:
<template>
<div>
<ul>
<li v-for="(item,index) in arr">{{ item }} => {{ index }}</li>
</ul>
<ul>
<li v-for="item in v">{{ item.name }}</li>
</ul>
<ul>
<li v-for="(value,key,index) in Stu">{{ key }}:{{ value }}</li>
</ul>
</div>
</template>
<script setup>
import {ref,reactive} from 'vue'
//数组
const arr = ref([1,2,3,4])
//对象数组
const v = ref([
{name:'yui',age:17},
{name:'anna',age:14},
{name:'yuki',age:17}])
//对象
const Stu = reactive({
name:'yui',
age:17,
sex:'女'
})
</script>
<style scoped>
</style>
这个的key不是☞v-for="(value,key,index) in Stu"
而是
<li v-for="item in items" :key="item.id">{{ item.name }}</li>
的key
在 Vue 的 v-for
列表渲染中,key
是一个特殊属性,用于为每个渲染的元素设置唯一标识。它的作用主要有:
key
帮助 Vue 更快、更准确地识别每个节点,从而只更新发生变化的部分,提升渲染性能。key
,Vue 可能复用或错误地移动 DOM 元素,导致渲染异常。
注意:Vue 的双向绑定指令是 v-model,用于在表单控件(如 input、textarea、select)和数据之间实现数据的双向绑定。
语法:v-model = "数据响应式"
演示:
<template>
<div>
用户名:<input type="text" v-model="login_message.username"><br>
密码:<input type="password" v-model="login_message.password">
</div>
</template>
<script setup>
import {reactive} from 'vue'
const login_message = reactive({
username:'',
password:''
})
</script>
<style scoped>
</style>