رِندر شرطی (Conditional Rendering)
v-if
از دستور v-if برای رِندر شرطی روی یک بلوک استفاده میشود. بلوک فقط در صورتی رِندر میشود که عبارت داخل دستور یک مقدار صحیح برگرداند.
template
<h1 v-if="awesome"> Vue عالی است! </h1>v-else
میتوانید از دستور v-else برای مشخص کردن قسمت "else" برای v-if استفاده کنید:
template
<button @click="awesome = !awesome"> تغییر وضعیت </button>
<h1 v-if="awesome"> Vue عالی است! </h1>
<h1 v-else> اوه نه 😢 </h1>Vue عالی است!
یک عنصر v-else باید بلافاصله بعد از یک عنصر v-if یا v-else-if قرار بگیرد - در غیر این صورت شناخته نخواهد شد.
v-else-if
v-else-if، همانطور که از اسمش پیداست، به عنوان یک بلوک "else if" برای v-if عمل میکند. همچنین میتواند به صورت زنجیرهای، چندین بار استفاده شود:
template
<div v-if="type === 'A'">
A
</div>
<div v-else-if="type === 'B'">
B
</div>
<div v-else-if="type === 'C'">
C
</div>
<div v-else>
Not A/B/C
</div>مشابه v-else، یک عنصر v-else-if باید بلافاصله بعد از یک عنصر v-if یا v-else-if قرار بگیرد.
v-if روی <template>
از آنجا که v-if یک دستورالعمل است، باید روی یک عنصر قرار بگیرد. اما اگر بخواهیم بیش از یک عنصر را تغییر دهیم چطور؟ در این صورت میتوان از v-if روی عنصر <template> استفاده کرد که به عنوان یک پوشش مخفی عمل میکند. نتیجهٔ نهایی رِندر شده شامل عنصر <template> نخواهد بود.
template
<template v-if="ok">
<h1>Title</h1>
<p>Paragraph 1</p>
<p>Paragraph 2</p>
</template>همچنین میتوانیم از v-else و v-else-if روی <template> استفاده کنیم.
v-show
گزینهٔ دیگر برای نمایش شرطی یک عنصر، دستور v-show است. استفاده از آن تا حد زیادی مشابه است:
template
<h1 v-show="ok">Hello!</h1>تفاوت در این است که یک عنصر با v-show همیشه رِندر میشود و در DOM باقی میماند. v-show فقط ویژگی display عنصر را در css آن تغییر میدهد.
v-show از عنصر <template> پشتیبانی نمیکند و همچنین v-else را قبول نمیکند.
v-if در مقابل v-show
v-if یک رِندر شرطی "واقعی" است چون اطمینان حاصل میکند که event listenerها و کامپوننتهای فرزند داخل بلوک شرطی به درستی در طول جابجایی از بین بروند و دوباره ساخته شوند.
v-if همچنین دارای تاخیر در لود شدن است (lazy): اگر شرط در ابتدا false باشد، هیچ کاری انجام نمیدهد - بلوک شرطی تا زمانی که شرط برای اولین بار true شود رِندر نمیشود.
در مقابل، v-show خیلی سادهتر است - عنصر همیشه صرف نظر از شرط اولیه رِندر میشود، با تغییر وضعیت مبتنی بر CSS عمل میکند.
به طور کلی، v-if هزینهی تغییر وضعیت بالاتری دارد در حالی که v-show هزینهی رِندر اولیه بالاتری دارد. پس اگر نیاز است چیزی به طور مکرر تغییر کند از v-show استفاده کنید و اگر شرط احتمالا در رانتایم تغییر نمیکند از v-if استفاده کنید. (مترجم: استفاده از v-if راحتتر است.)
v-if با v-for
توجه داشته باشید
استفاده از v-if و v-for روی یک عنصر به دلیل اولویت ضمنی، توصیه نمیشود. برای جزئیات به style guide مراجعه کنید.
زمانی که v-if و v-for هر دو روی یک عنصر استفاده میشوند، ابتدا v-if ارزیابی میشود. برای جزئیات به list rendering guide مراجعه کنید.