Vue では、v-if
と v-show
を使用して要素またはテンプレートのレンダリングを制御できます。 v-if
と v-show
も Vue で一般的に使用される内部命令です。ここで説明する命令は directive
であり、プレフィックス v-
が付いた特別なコマンドを指します。命令の値はバインディング式に限定されます。命令の責任は次のとおりです。変更時に DOM に特別な動作を適用します。 2 つの命令
v-if
と v-show
は、誰もが 条件付きレンダリング命令 ## とよく呼ぶものです。 #。 (学習ビデオ共有: vue ビデオ チュートリアル)
v-if ディレクティブ。その機能は、式
true または
false の値に基づいて DOM 内の要素 (または複数の要素) を生成または削除することです。これは、JavaScript の
if の条件判断に似ています。 Vue には、
v-if に加えて、
v-else-if と
v-else もあります。
v-if式の値に従って決定DOM 内に要素を生成するかどうか。例:
<!-- template --> <div id="app"> <h1 v-if="true">v-if的值为true时,显示这个div元素</h1> </div> // JavaScript var app = new Vue({ el: '#app', data: { } })
<h1> 要素が
div#app 要素に挿入され、次のように表示されます:
v-if ディレクティブを追加し、その値を
true# に設定します。 ## または false
。たとえば、上の例では true
を設定し、要素がレンダリングされます。上記の true
値を false
に変更すると、<h1>
要素は表示されません。
に true
または false
を直接設定するほか、式で判定することもできます。例: <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false"><!-- template -->
<div id="app">
<h1 v-if="isShow">
v-if的值为true时,显示这个div元素
</h1>
</div>
// JavaScript
var app = new Vue({
el: '#app',
data: { isShow: true }
})</pre><div class="contentsignin">ログイン後にコピー</div></div>
上記の例では、
の値が true
として宣言され、h1
要素で次のように宣言されています。 v-if
ディレクティブ バインディング isShow
を渡します。実際、これは v-if="true"
に似ています。 h1
要素も通常どおりレンダリングされます。
を false
に設定すると、 h1
要素はレンダリングされません。
上では 1 つの要素をレンダリングしていますが、複数の要素をレンダリングしたい場合は、内部に複数の要素を直接入れ子にする必要がありますか?私たちの考えを検証してみましょう:
<!-- template --> <div id="app"> <div v-if="isShow"> <h1>我是标题</h1> <p>我是段落</p> </div> </div>
は想像どおりです。ただし、Vue では、複数の要素を切り替える場合、通常はこの方法ではなく、パッケージ化要素として
<template> 要素を使用し、v-if# を使用します。 ## その上で。最終的なレンダリング結果には、
<template> 要素は含まれません。次のように:
<template v-if="isShow"> <h1>标题</h1> <p>段落 1</p> <p>段落 2</p> </template>
##v-else
も似ていますが、v-if
と組み合わせて使用する必要があります。たとえば、ログインすると、ログインしている場合はウェルカム メッセージが表示され、ログインしていない場合はログインするように求められます。次に、次のような isLogined
式を設定します。 <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false"><!-- Template -->
<div id="app">
<h1 v-if="isLogined">欢迎来到W3cplus!(^_^)</h1>
<h1 v-else>请先登录,再来!(^_^)</h1>
</div>
// JavaScript
var app = new Vue({
el: '#app',
data: {
isLogined: true
}
})</pre><div class="contentsignin">ログイン後にコピー</div></div>
ご想像のとおり、ブラウザで次の図の効果が確認できます。
isLogined の値を
false に置き換えると、レンダリングされるコンテンツが変更されます:
v-if と
v-else を <template> ;
とともに使用します。実装は非常に簡単です。たとえば、勝った場合と勝てなかった場合: <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false"><template v-if=&#39;isPrized&#39;>
<figure>
<figcaption>恭喜你中了5元红包</figcaption>
<img src="xxx" />
</figure>
</template>
<template v-else>
<figure>
<figcaption>亲,就差那么一点点</figcaption>
<img src="xxx" />
</figure>
</template></code><code>v-else-if</code></p>
<h3>##v-else-if<strong> および </strong>else if JavaScript </h3> も同様で、<p>v-if<code> と一緒に使用する必要があります。複数の条件が同時に存在する場合は、演算結果に基づいて表示するかどうかを決定します。次のコードに示すように、表示されるブロックは </code>type<code> の値に基づいて決定されます。たとえば、この例では、</code>type<code> の値が </code>B<code> に設定されている場合、ブロック </code>B<code> が表示されます。変更 </code> type<code> の値は、別の領域を表示します: </code><code></code></p>
<h2><strong>v-show</strong></h2>
<hr>
<p>文章开头提到过,除了<code>v-if</code>之外,Vue还提供<code>v-show</code>也可以控制元素的渲染。<code>v-show</code>和<code>v-if</code>功能有点相似,其中<code>v-if</code>依赖于控制DOM节点,而<code>v-show</code>是依赖于控制DOM节点的<code>display</code>属性。当<code>v-show</code>传入的值为<code>true</code>时,对应DOM元素的<code>display</code>的值为<code>block</code>之类的,反之为<code>false</code>时,<code>display</code>的值为<code>none</code>。也就是用户看不到元素的显示,但其DOM元素还是存在的。</p>
<pre class="brush:php;toolbar:false"><!-- Template -->
<div id="app">
<h1 v-show="true">我是一个标题</h1>
<p v-show="isShow">我是一个段落</p>
</div>
// JavaScript
var app = new Vue({
el: '#app',
data: {
isShow: false
}
})</pre><div class="contentsignin">ログイン後にコピー</div></div>
<p>在浏览器看到的效果将是这样的:</p>
<p><img src="https://img.php.cn/upload/article/000/000/024/e6b42caa8a650f011c2e1d8dc21e96aa-8.png" alt=""></p>
<blockquote><p><strong>注意</strong>,<code>v-show
不支持 <template>
语法,也不支持 v-else
。
v-if
和v-show
都能控制DOM元素的显示和隐藏,但是在切换v-if
模块时,Vue有一个局部编译/卸载过程,因为v-if
中的模板可能包括数据绑定或者子组件,v-if
是真是的条件渲染,它会确保条件快在切换时合适的销毁与重建条件块内的时间监听器和子组件。
两者之间的具体区别,官网是这样描述的:
v-if
是“真正的”条件渲染,因为它会确保在切换过程中条件块内的事件监听器和子组件适当地被销毁和重建
v-if
也是惰性的:如果在初始渲染时条件为假,则什么也不做——直到条件第一次变为真时,才会开始渲染条件块。v-show
就简单得多——不管初始条件是什么,元素总是会被渲染,并且只是简单地基于 CSS 进行切换。一般来说,v-if
有更高的切换开销,而 v-show
有更高的初始渲染开销。因此,如果需要非常频繁地切换,则使用 v-show
较好;如果在运行时条件不太可能改变,则使用 v-if
较好。
这篇文章主要了解了Vue中的v-if
和v-show
。这两个都是Vue的内部指令,而且都是用来控制元素的渲染。只不过,v-if
判断是否加载,可以减轻服务器的压力,在需要时加载;v-show
调整DOM元素的CSS的dispaly
属性,可以使客户端操作更加流畅。虽然这两都都能很好的控制元素的渲染,但实际使用的时候,更应该根据自己的场景来判断使用哪一个指令。
原文地址::https://www.w3cplus.com/vue/v-if-vs-v-show.html
以上がVue の条件付きレンダリング命令の詳細な説明: v-if および v-showの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。