# Vue 内置指令

在Vue中,指令其实就是特殊的属性

# v-for

基于源数据多次渲染元素或模板块 :key="item.id "是 v-for 的核心 如果没有这个:key 我们的 Vue 就会报错 , 那么为什么会有 Key , Key 要给的参数是什么呢? Key 的参数是唯一的 , 也就是我们不管循环几次 , 每次循环的 key 不能有重复 , 这里我们不推荐用 index 来当你的 Key , 说到底,key 的作用就是更新组件时判断两个节点是否相同。相同就复用,不相同就删除旧的创建新的。在渲染简单的无状态组件时,如果不添加 key 组件默认都是就地复用,不会删除添加节点,只是改变列表项中的文本值,要知道节点操作是十分耗费性能的。而添加了 key 之后,当对比内容不一致时,就会认为是两个节点,会先删除掉旧节点,然后添加新节点。

<li v-for="(item,index) in arr" :key="item.id">
     {{ item.name }}
</li>

# v-show

v-show 根据表达式的真假值,切换元素的display值,用于控制元素的展示和隐藏,他的原理其实是控制 css 样式来使得我们对应的组件或者盒子显示 ,隐藏 dispaly:"none" ,显示 dispaly:"block"

# v-if

v-if 是根据条件创建和销毁 Dom

# v-else

v-if 条件不成立的时候就会直接走到 v-else 上去,组件之前必须要跟 v-if

<div v-if="false"> 看不到  </div> // 我条件不成立不创建Dom
<div v-else> 能看到 </div>

v-else-if v-if 条件不成立的时候就会直接走到 v-else-if 上去看条件判断成立不成立 , 条件成立就渲染组件,组件之前必须要跟 v-if

<p v-if="score>=90">优秀</p>
<p v-else-if="score>=60">及格</p>

# v-once

它的作用就是定义它的元素或组件只会渲染一次 , 当第一次渲染之后也不会随着数据的更新而来进行重新渲染,就相当于一个静态内容

# v-text

以文本的方式来插入数据 , 是用于操作纯文本 , 他是会替代本身元素上面的内容,如果数据更新随之试图也会发生改变

<p v-text="str">xxxxxx</p>  // xxxxxx并不会显示,被替代了

data(){
    retrun {
        str:'v-text文本内容'
    }
}

# v-html

v-html用于更新元素的 innerHTML,它与v-text区别在于v-text输出的是纯文本,浏览器不会对其再进行html解析,但v-html会将其当html标签解析后输出

# v-on

v-on 有一个简便的写法就是@ 简单来说v-on就是绑定事件 , 可以在一个标签绑定多个事件 , v-on:第一个是事件 , 事件后面跟着一个自定义方法

 <button v-on:mouseenter='onenter' @click='leave'>click me</button>

# v-bind

v-bind 也有一个简便的写法就是: 简单来说v-on就是用于绑定数据和元素属性 , 最常用的方法就是用于动态绑定class

# v-model

v-model是Vue双向绑定指令 , 它可以在页面是输入的状态同时改变绑定data属性 , 也会在data属性发生改变的时候也更新页面的状态 , 我们经常在input上面能发现他的存在 , 他的本质上其实是绑定了<input :value="test" @input="test = $event.target.value"> ,

  • v-model后面可以跟修饰符比如 .lazy 、.trim 和 .number 这些修饰符一起使用
    • .lazy 将input的实时更新改为一个change事件 , 只有失焦的时候input才会触发事件
    • .trim 去除字符串首尾的空格
    • .number 将数据转化为值类型
<input v-model="test">
<input v-model.lazy="msg" >
<input v-model.trim="msg">
<input v-model.number="age" type="number">

# v-cloak

v-cloak指令主要用于解决插值表达式在页面闪烁问题

<div v-cloak>
  {{ message }}
</div>
[v-cloak] {
  display: none;  
  /* 这样div只会在编译结束后显示 */
}
Last Updated: 3/5/2022, 2:50:56 PM