关于Vue中v-cloak的使用讲解

关于Vue.js中v-cloak的使用,单看官方文档,可能看得有点迷糊:

这个指令保持在元素上直到关联实例结束编译。和 CSS 规则如 [v-cloak] { display: none } 一起用时,这个指令可以隐藏未编译的 Mustache 标签直到实例准备完毕。官方文档

一个问题

v-cloak指令的设计是为了解决什么问题?

?下面代码:

<div class="#app">
    <p>{{message}}</p>
</div>
复制代码

在网络不好或加载数据过大的情况下,页面在渲染的过程会闪烁Mustache 标签:

为了用户有更好的优化体验,Vue加入了延缓响应的指令v-cloak,在与css:[v-cloak] { display: none } 的配合下,可以隐藏未编译 Mustache 的标签直到实例准备完毕,v-cloak属性才会被自动去除,对应的标签也才可见了。

当然上面的例子很难看到页面闪烁,因为太快了,我们延后加载 Vue 实例:示例参考

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <title>Title</title>
    <script src="https://unpkg.com/vue@2.5.17/dist/vue.js"></script>
    <style type="text/css">
      [v-cloak] {
        display: none !important;
      }
    </style>
  </head>
  <body>
    <div id="app">
      <span>{{ msg }}</span>
    </div>
    <script>
      setTimeout(() => {
        new Vue({
          el: '#app',
          data: {
            msg: 'hello vue'
          }
        })
      }, 2000)
    </script>
  </body>
</html>
复制代码

代码运行,在2000ms前页面显示的是{{ msg }}

现在往<span>{{ msg }}</span>中添加v-cloak指令,在运行代码:

2000ms页面为空,2000ms后出现hello vue,解决了在实例挂载之前,页面闪现Mustache 标签的尴尬问题。

v-cloak 无效问题

问题出现在[v-cloak] { display: none }的失效。

1、v-cloakdisplay属性可能被层级更高css给覆盖了,解决方法:用important加权:

 [v-cloak] {
        display: none !important;
      }
复制代码

2、最好的解决办法就是在index.html中,以内联css的方式引入。

 <style type="text/css">
      [v-cloak] {
        display: none !important;
      }
    </style>
复制代码
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值