vue 指令

183 阅读3分钟

v-show

v-show 是根据布尔值来进行渲染 , true 就页面显示 , false 就不在页面显示 ,他的原理其实是控制css样式来使得我们对应的组件或者盒子显示 ,隐藏dispaly:"none" ,显示dispaly:"block" 显示隐藏判断成绩条件

<template>
  <div>
    <div v-show="flag">我出现了</div>
      <button @click="isFFF">点击显示</button>
  </div>
</template>
<script>
export default {
  data() {
    return {
      flag: false,
    };
  },
  methods: {
    isFFF() {
      this.flag = !this.flag;
    },
  },
};
</script>
tu.png tu.png # v-if v-else **v-if** 也是根据布尔值来进行渲染 ,跟**v-show**也是差不多, **true** 就页面显示 , **false** 就不在页面显示 但是**v-if**是惰性的 如果初始值是**false**组件就不会渲染出来 , 知道第一次他的参数变成**true** 他才会渲染,但他的条件又变成**false**的时候 , 子组件适当就会呗地被销毁和重建 , 如果需要非常频繁地切换,则使用 **v-show** 较好;如果在运行时条件很少改变,则使用 **v-if** 较好。

v-else 在 v-if条件不成立的时候就会直接走到v-else上去 ,记住v-else后面不能跟等号 , 组件之前必须要跟v-if

<template>
  <div>
    <div v-if="flag">显示</div>
    <div v-else>不显示</div>
    <button @click="isFFF">点击显示</button>
  </div>
</template>
<script>
export default {
  data() {
    return {
      flag: true,
    };
  },
  methods: {
    isFFF() {
      this.flag = !this.flag;
    },
  },
};
</script>
VWCJU@JH44M2`}0PNBRH5IL.png VIMQC4OD]BY0KO[H{D{OUKQ.png

v-if v-else-if

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

<template>
  <div>
    <div v-if="num >= 90">牛x</div>
    <div v-else-if="num < 90 && num >= 80">优秀</div>
    <div v-else-if="num < 80 && num >= 60">一般</div>
    <div v-else></div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      num: 82,
    };
  },
};
</script>

<style>
</style>
U4067`9_0X61HNXW1Y6RX2L.png

v-if v-show v-else v-else-if v-one v-text

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

<template>
  <div>
    <div>
      <input type="text" name="" id="" v-model="num" />
      <div v-show="flag" v-if="num >= 90" v-text='牛x' ></div>
      <div v-show="flag" v-else-if="num < 90 && num >= 80">优秀</div>
      <div v-show="flag" v-else-if="num < 80 && num >= 60">一般</div>
      <div v-show="flag" v-else></div>
       <button v-on:click="isFFF">评测</button>
      <button @click="isFFF">评测</button>
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      flag: false,
      num: 0,
    };
  },
  methods: {
    isFFF() {
      this.flag = !this.flag;
    },
  },
};
</script>

<style>

</style>
VPZ)N()ITABD48Y_UZOEGMO.png tu.png

v-text v-html

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

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

<template>
  <div>
      <div v-text="name"></div>
      <div v-html="msg"></div>
  </div>
</template>
<script>
export default {
  data() {
    return {
      name: "翟",
      msg: "<h1>我是h1</h1>",
    };
  },
};
</script>
tu.png

v-once v-bind

仅渲染元素和组件一次,并且跳过未来更新,直接从缓存中获取保存的状态

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

<template>
 <div>
   <div v-once>{{ count }}</div>
   <button v-on:click="addCount">你点我count也不加</button>
   
   <div :class="number"></div>
 </div>
</template>
<script>
export default {
 data() {
   return {
     count: 10,
   };
 },
 methods: {
   addCount: function () {
     this.count++;
     console.log("this.count:" + this.count);
   },
 },
};
</script>
IEN97UI947TK{JWGFE8LNKO.png

v-for

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

<template>
 <div>
    <div v-for="(item, index) in arr" :key="item.id">
     {{ item.name }}
   </div>
 </div>
</template>
<script>
export default {
 data() {
   return {
    arr: [
       {
         name: "翟",
       },
       {
         name: "亚",
       },
       {
         name: "凯",
       },
     ],
   };
 },
};
</script>
IB%AWK0TLC4XY(FWV8IY`9D.png # v-model
<template>
 <div>
    <div v-for="(item, index) in arr" :key="item.id">
     {{ item.name }}
   </div>
 </div>
</template>
<script>
export default {
 data() {
   return {
   :
   };
 },
};
</script>
tu.png

文章参考资料