【博学谷学习记录】超强总结 用心分享|前端学习w22- vue指令(7)

55 阅读2分钟

10. v-cloak

1.本质是一个特殊属性,Vue实例创建完毕并接管容器后,会删掉v-cloak属性。
2.使用css配合v-cloak可以解决网速慢时页面展示出{{xxx}}的问题。

代码演示:

网速慢的时候:

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8" />
 <meta http-equiv="X-UA-Compatible" content="IE=edge" />
 <meta name="viewport" content="width=device-width, initial-scale=1.0" />
 <title>v-clock</title>
 <script src="../js/vue.js"></script>
</head>
<body>
 <div id="root">
   <h1>{{name}}</h1>
 </div>
 <script>
   Vue.config.productionTip = false;
   const vm = new Vue({
     el: '#root',
     data: {
       name:"Dapan"
     },
   });
 </script>
</body>
</html>

这个时候因为网速过慢,导致vue.js并没有加载出来,所以页面渲染如下:

image.png 使用v-cloak之后:

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8" />
 <meta http-equiv="X-UA-Compatible" content="IE=edge" />
 <meta name="viewport" content="width=device-width, initial-scale=1.0" />
 <title>v-cloak</title>
 <script src="../js/vue.min.js"></script>
 <style>
   [v-cloak] {
     display: none;
   }
 </style>
</head>
<body>
 <div id="root">
   <h1 v-cloak>{{name}}</h1>
 </div>
 <script>
   Vue.config.productionTip = false;
   const vm = new Vue({
     el: '#root',
     data: {
       name:"Dapan"
     },
   });
 </script>
</body>
</html>

设置了所有包含v-cloak属性的页面的display为none:

打开Live Server为空白,但是当vue.js加载好之后会删掉v-cloak属性,进而display值也就不再是none

11. v-once

1.v-once所在节点在初次动态渲染后,就视为静态内容了。
2.以后数据的改变不会引起v-once所在结构的更新,可以用于优化性能。

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>test</title>
    <script src="../js/vue.js"></script>
  </head>
  <body>
    <div id="root">
      <h1 v-once>初始化时候的n是:{{n}}</h1>
      <h1>现在的n是:{{n}}</h1>
      <button @click="n++">点我n加1</button>
    </div>
    <script>
      Vue.config.productionTip = false;
      const vm = new Vue({
        el: '#root',
        data: {
          n: 1,
        },
      });
    </script>
  </body>
</html>

点击两次按钮之后:

image.png 注意: v-cloak和v-once都没有值(后面都没有等号)。

12. v-pre

1.跳过Vue在有v-pre属性的所在节点的编译过程。
2.可利用它跳过:没有使用指令语法、没有使用插值语法的节点,会加快编译速度

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>test</title>
    <script src="../js/vue.js"></script>
  </head>
  <body>
    <div id="root">
      <h1 v-pre>没有使用指令语法和插值语法</h1>
      <h1 v-pre>{{name}}</h1>
    </div>
    <script>
      Vue.config.productionTip = false;
      const vm = new Vue({
        el: '#root',
        data: {
          name: 'dapan',
        },
      });
    </script>
  </body>
</html>

image.png

一句话总结这12个常用指令:

  • v-on : 绑定事件监听, 可简写为@
  • v-bind : 单向绑定解析表达式, 可简写为 :xxx
  • v-model : 双向数据绑定
  • v-for : 遍历数组/对象/字符串
  • v-show : 条件渲染 (动态控制节点是否展示)
  • v-if : 条件渲染(动态控制节点是否存存在)
  • v-else : 条件渲染(动态控制节点是否存存在)
  • v-text:将数据填充到标签中(不会解析填充内容中的HTML标签)
  • v-html:将数据填充到标签中(会解析填充内容中的HTML标签)
  • v-cloak:一个特殊属性,Vue接管标签后会删掉这个属性(没有值)
  • v-once:只渲染一次,之后Vue就不再渲染这个标签了(视为静态内容了)
  • v-pre:Vue不接管这个属性所在的标签(可用于加快编译速度,用于没有使用指令语法、没有使用插值语法的节点上)