Bird
Raised Fist0
Vueframework~5 mins

v-else and v-else-if in Vue

Choose your learning style10 modes available
Introduction

v-else and v-else-if help you show or hide parts of your webpage based on conditions. They make your page change when things change.

Show a message only if a user is logged in or not.
Display different buttons depending on a setting.
Show a warning if a form is empty, else show a success message.
Switch between different views based on user choices.
Syntax
Vue
<template>
  <div v-if="condition1">Content 1</div>
  <div v-else-if="condition2">Content 2</div>
  <div v-else>Content 3</div>
</template>

v-else must come right after a v-if or v-else-if element without any space or other elements between.

v-else-if lets you check another condition if the first one is false.

Examples
This shows different messages based on the score value.
Vue
<template>
  <p v-if="score >= 90">You got an A!</p>
  <p v-else-if="score >= 80">You got a B!</p>
  <p v-else>You need to try harder.</p>
</template>
Shows a Logout button if logged in, otherwise shows Login.
Vue
<template>
  <button v-if="isLoggedIn">Logout</button>
  <button v-else>Login</button>
</template>
Sample Program

This component shows a message based on the weather variable. It first checks if the weather is sunny, then rainy, else shows unknown.

Vue
<template>
  <div>
    <p v-if="weather === 'sunny'">It's sunny outside!</p>
    <p v-else-if="weather === 'rainy'">Don't forget your umbrella.</p>
    <p v-else>Weather is unknown.</p>
  </div>
</template>

<script setup>
import { ref } from 'vue'

const weather = ref('rainy')
</script>
OutputSuccess
Important Notes

Always place v-else or v-else-if immediately after v-if or v-else-if without any other elements in between.

Only one v-else block is allowed per v-if chain.

Use v-else-if to check multiple conditions in order.

Summary

v-else and v-else-if control what shows based on conditions.

v-else runs if all previous conditions are false.

v-else-if checks another condition after v-if.

Practice

(1/5)
1. What does the v-else directive do in Vue?
easy
A. Runs only if the first v-if condition is true
B. Runs when all previous v-if and v-else-if conditions are false
C. Runs independently of any other condition
D. Runs only if the last v-else-if condition is true

Solution

  1. Step 1: Understand v-if and v-else-if behavior

    v-if runs if its condition is true; v-else-if runs if the previous v-if or v-else-if was false and its own condition is true.
  2. Step 2: Understand v-else behavior

    v-else runs only if all previous v-if and v-else-if conditions are false, acting as a fallback.
  3. Final Answer:

    Runs when all previous v-if and v-else-if conditions are false -> Option B
  4. Quick Check:

    v-else = fallback [OK]
Hint: Remember: v-else is the fallback after all conditions fail [OK]
Common Mistakes:
  • Thinking v-else runs independently
  • Confusing v-else with v-else-if
  • Assuming v-else requires a condition
2. Which of the following is the correct syntax for using v-else-if in Vue?
easy
A. <div v-else-if="condition">Content</div>
B. <div v-else-if>condition</div>
C. <div v-else-if:condition>Content</div>
D. <div v-else-if(condition)>Content</div>

Solution

  1. Step 1: Recall Vue directive syntax

    Vue directives use the format v-directive="expression" to bind conditions or values.
  2. Step 2: Check each option's syntax

    <div v-else-if="condition">Content</div> uses v-else-if="condition", which is correct. Options B, C, and D use invalid syntax forms.
  3. Final Answer:

    <div v-else-if="condition">Content</div> -> Option A
  4. Quick Check:

    Directive syntax = v-else-if="condition" [OK]
Hint: Use quotes for conditions in v-else-if [OK]
Common Mistakes:
  • Omitting quotes around condition
  • Using parentheses or colons incorrectly
  • Writing v-else-if without a condition
3. Given this Vue template snippet:
<div v-if="score >= 90">A</div>
<div v-else-if="score >= 75">B</div>
<div v-else-if="score >= 60">C</div>
<div v-else>F</div>

What will be displayed if score is 80?
medium
A. A
B. C
C. B
D. F

Solution

  1. Step 1: Evaluate the first condition score >= 90

    Since 80 is less than 90, this condition is false, so this block does not render.
  2. Step 2: Evaluate the second condition score >= 75

    80 is greater than or equal to 75, so this condition is true. Vue renders this block and skips the rest.
  3. Final Answer:

    B -> Option C
  4. Quick Check:

    80 >= 75 = true, so output is B [OK]
Hint: Check conditions top to bottom; first true runs [OK]
Common Mistakes:
  • Choosing the first condition without checking value
  • Ignoring order of v-else-if blocks
  • Assuming multiple blocks render
4. What is wrong with this Vue template?
<div v-if="isActive">Active</div>
<div v-else-if>Inactive</div>
<div v-else>Unknown</div>
medium
A. The v-else-if directive is missing a condition
B. The v-else directive cannot be used after v-else-if
C. The v-if directive must have a closing tag
D. There should be no v-else after v-if

Solution

  1. Step 1: Check v-else-if usage

    v-else-if requires a condition to evaluate. Here, it is used without any condition, which is invalid syntax.
  2. Step 2: Verify other directives

    v-else can follow v-else-if, and v-if has proper closing tags, so no issues there.
  3. Final Answer:

    The v-else-if directive is missing a condition -> Option A
  4. Quick Check:

    v-else-if needs a condition [OK]
Hint: v-else-if always needs a condition in quotes [OK]
Common Mistakes:
  • Leaving v-else-if without condition
  • Thinking v-else can't follow v-else-if
  • Confusing v-if closing tags
5. You want to display a message based on a user's status using Vue directives. The statuses are: 'admin', 'editor', and others. Which template correctly uses v-if, v-else-if, and v-else to show 'Admin Access', 'Editor Access', or 'Guest Access' respectively?
hard
A.
<div v-if="status === 'admin'">Admin Access</div>
<div v-else>Editor Access</div>
<div v-else-if="status === 'editor'">Guest Access</div>
B.
<div v-if="status === 'admin'">Admin Access</div>
<div v-if="status === 'editor'">Editor Access</div>
<div v-else>Guest Access</div>
C.
<div v-if="status === 'admin'">Admin Access</div>
<div v-else-if>Editor Access</div>
<div v-else>Guest Access</div>
D.
<div v-if="status === 'admin'">Admin Access</div>
<div v-else-if="status === 'editor'">Editor Access</div>
<div v-else>Guest Access</div>

Solution

  1. Step 1: Check the chaining of conditions

    <div v-if="status === 'admin'">Admin Access</div>
    <div v-else-if="status === 'editor'">Editor Access</div>
    <div v-else>Guest Access</div>
    correctly uses v-if, then v-else-if with a condition, then v-else as fallback.
  2. Step 2: Verify other options for errors

    <div v-if="status === 'admin'">Admin Access</div>
    <div v-if="status === 'editor'">Editor Access</div>
    <div v-else>Guest Access</div>
    uses two v-if directives, which are independent and can cause multiple blocks to render.
    <div v-if="status === 'admin'">Admin Access</div>
    <div v-else-if>Editor Access</div>
    <div v-else>Guest Access</div>
    uses v-else-if without a condition, which is invalid.
    <div v-if="status === 'admin'">Admin Access</div>
    <div v-else>Editor Access</div>
    <div v-else-if="status === 'editor'">Guest Access</div>
    places v-else before v-else-if, which breaks the chain.
  3. Final Answer:

    The template that correctly chains v-if, v-else-if with condition, and v-else -> Option D
  4. Quick Check:

    v-if, v-else-if with condition, then v-else [OK]
Hint: Chain conditions: v-if, v-else-if with condition, then v-else [OK]
Common Mistakes:
  • Using multiple v-if instead of v-else-if
  • Omitting condition in v-else-if
  • Placing v-else before v-else-if
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard