HTML: 元素加上v-cloakcss
CSS: [v-cloak]{display: none}vue
页面刚加载的时候胡子语法会显示出来。node
v-cloak是VueJS小型项目中提高用户体验简单且重要的方法。app
HTML中在你须要组织闪现的标签上加上v-cloakthis
<div id="app"> <nav>blabla</nav> <main v-cloak>{{text}}</main> </div>
CSS中给v-cloak设定样式,这个样式是只有【在vue实例编译结束前】应用的样式。ssr
[v-cloak]{ display: none; }
我没读完源码,可是v-cloak的原理我大概理解一点:code
首先是CSS选择器,用[target]选择的是“带有 target 属性全部元素。”。能够点这里复习选择器。orm
那么[v-cloak]选择出来的就是全部带有v-cloak属性的元素了。server
实例初始化完成以后,VueJS中会把Vue中特有的attribute去掉。在实例初始化完成以前,上面写的main的HTML代码实际是这样的:element
<main id="main" class="row" v-cloak="">
而后加上CSS,就把全部带有v-cloak的元素都display: block了。
其实不止是v-cloak,你能够用v-if来试试,CSS里使用[v-if]{display:none},效果看起来是同样的。和v-cloak同样,v-if也是在实例编译完以后去掉。
而后我刚才去读了一下源码,大概是这一段,感兴趣的大佬能够去搜搜读读理解理解。
if (isRealElement) { // mounting to a real element // check if this is server-rendered content and if we can perform // a successful hydration. if (oldVnode.nodeType === 1 && oldVnode.hasAttribute(SSR_ATTR)) { oldVnode.removeAttribute(SSR_ATTR); hydrating = true; } }