小项目中怎么防止Vue的闪现画面效果
<p><span style="color: #ff0000"><strong>一句话总结</strong></span></p><p>HTML: 元素加上v-cloak</p>
<div class="jb51code">
<pre class="brush:css;">
CSS: {display: none}</pre>
</div>
<p><span style="color: #ff0000"><strong>过程</strong></span></p>
<p>页面刚加载的时候胡子语法会显示出来。</p>
<p><code>v-cloak</code>是VueJS小型项目中提升用户体验简单且重要的方法。</p>
<p><span style="color: #ff0000"><strong>用法</strong></span></p>
<p>HTML中在你需要组织闪现的标签上加上<code>v-cloak</code></p>
<div class="jb51code">
<pre class="brush:css;">
<div id="app">
<nav>blabla</nav>
<main v-cloak>{{text}}</main>
</div></pre>
</div>
<p>CSS中给v-cloak设定样式,这个样式是只有【在vue实例编译结束前】应用的样式。</p>
<div class="jb51code">
<pre class="brush:css;">
{
display: none;
}</pre>
</div>
<p><span style="color: #ff0000"><strong>原理</strong></span></p>
<p>我没读完源码,但是<code>v-cloak</code>的原理我大概理解一点:</p>
<p>首先是CSS选择器,用选择的是“带有 target 属性所有元素。”。可以点这里复习选择器。</p>
<p>那么选择出来的就是所有带有<code>v-cloak</code>属性的元素了。</p>
<p>实例初始化完成之后,VueJS中会把Vue中特有的attribute去掉。在实例初始化完成之前,上面写的main的HTML代码实际是这样的:</p>
<div class="jb51code">
<pre class="brush:css;">
<main id="main" class="row" v-cloak=""></pre>
</div>
<p>然后加上CSS,就把所有带有v-cloak的元素都<code>display: block</code>了。</p>
<p>其实不止是v-cloak,你可以用v-if来试试,CSS里使用<code>{display:none}</code>,效果看起来是一样的。和<code>v-cloak</code>一样,v-if也是在实例编译完之后去掉。</p>
<p><span style="color: #ff0000"><strong>源码</strong></span></p>
<p>然后我刚才去读了一下源码,大概是这一段,感兴趣的大佬可以去搜搜读读理解理解。</p>
<div class="jb51code">
<pre class="brush:xhtml;">
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;
}
}</pre>
</div>
頁:
[1]