Bird
Raised Fist0
Vueframework~20 mins

v-model modifiers (lazy, number, trim) in Vue - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Vue v-model Modifiers Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ component_behavior
intermediate
2:00remaining
How does the lazy modifier affect v-model updates?
Consider a Vue 3 component with an input bound using v-model.lazy. When does the component update its bound data compared to a normal v-model?
Vue
<template>
  <input v-model.lazy="text" />
  <p>{{ text }}</p>
</template>

<script setup>
import { ref } from 'vue'
const text = ref('')
</script>
AThe data updates only when the input is cleared.
BThe data updates only when the input loses focus (on blur event).
CThe data updates immediately on every keystroke.
DThe data updates only when the Enter key is pressed.
Attempts:
2 left
💡 Hint
Think about when the input event triggers versus the change event.
❓ component_behavior
intermediate
2:00remaining
What effect does the number modifier have on v-model?
Given an input bound with v-model.number, what type will the bound data have after user input?
Vue
<template>
  <input v-model.number="age" />
  <p>{{ typeof age }}</p>
</template>

<script setup>
import { ref } from 'vue'
const age = ref('')
</script>
A'number', because the modifier converts input to a number.
B'string', because input values are always strings.
C'boolean', because the modifier converts input to true or false.
D'object', because the modifier wraps the value.
Attempts:
2 left
💡 Hint
Consider what happens when you type '42' in the input.
📝 Syntax
advanced
2:00remaining
Which v-model usage correctly trims whitespace from user input?
Select the correct Vue 3 template syntax that trims whitespace from the input value using v-model modifiers.
A<input v-model="trim(username)" />
B<input v-model.lazy.trim="username" />
C<input v-model="username.trim" />
D<input v-model.trim="username" />
Attempts:
2 left
💡 Hint
Modifiers are added after v-model separated by dots.
🔧 Debug
advanced
2:00remaining
Why does this v-model.number input not convert to a number?
Given this code, the bound data remains a string after input. What is the likely cause?
Vue
<template>
  <input v-model.number.lazy="score" />
  <p>{{ typeof score }}</p>
</template>

<script setup>
import { ref } from 'vue'
const score = ref('')
</script>
ABecause <code>number</code> modifier does not work with <code>lazy</code> modifier.
BBecause <code>score</code> is initialized as a string, it cannot convert to number.
CBecause <code>lazy</code> delays update until blur, the number conversion happens only then.
DBecause <code>v-model.number.lazy</code> syntax is invalid and ignored.
Attempts:
2 left
💡 Hint
Check when the data updates and when the conversion applies.
🧠 Conceptual
expert
3:00remaining
What is the combined effect of v-model.lazy.number.trim modifiers on an input?
Explain what happens to the bound data when using v-model.lazy.number.trim on an input element.
Vue
<template>
  <input v-model.lazy.number.trim="value" />
  <p>{{ value }} ({{ typeof value }})</p>
</template>

<script setup>
import { ref } from 'vue'
const value = ref('')
</script>
AThe input updates the bound data only on blur, trims whitespace, and converts the value to a number.
BThe input updates on every keystroke, trims whitespace, but keeps the value as a string.
CThe input updates only on blur, but does not trim or convert the value.
DThe input updates on every keystroke, converts to number, but does not trim whitespace.
Attempts:
2 left
💡 Hint
Consider the order and effect of each modifier on update timing and value transformation.

Practice

(1/5)
1. What does the .lazy modifier do when used with v-model in Vue?
easy
A. Converts the input value to a number immediately
B. Automatically trims whitespace from the input value
C. Prevents the input from updating the bound data
D. Updates the bound data only when the input loses focus or on change event

Solution

  1. Step 1: Understand the default v-model behavior

    By default, v-model updates the bound data on every input event (each keystroke).
  2. Step 2: Effect of .lazy modifier

    The .lazy modifier changes this behavior to update only when the input loses focus or on the change event.
  3. Final Answer:

    Updates the bound data only when the input loses focus or on change event -> Option D
  4. Quick Check:

    .lazy delays update until change [OK]
Hint: Lazy means update on change or blur, not every keystroke [OK]
Common Mistakes:
  • Thinking .lazy trims spaces
  • Assuming .lazy converts to number
  • Believing .lazy prevents updates
2. Which of the following is the correct syntax to use v-model with the .number modifier on an input element?
easy
A.
B.
C.
D.

Solution

  1. Step 1: Recall correct modifier syntax

    Vue modifiers are added after v-model with a dot, like v-model.number.
  2. Step 2: Identify correct syntax

    The correct syntax is <input v-model.number="age">. Placing the modifier inside quotes, using a function call, or adding it as a separate attribute is incorrect.
  3. Final Answer:

    <input v-model.number="age"> -> Option A
  4. Quick Check:

    Modifier syntax = dot after v-model [OK]
Hint: Modifiers go right after v-model with a dot [OK]
Common Mistakes:
  • Placing modifier inside quotes
  • Using modifier as a property of variable
  • Adding modifier as a separate attribute
3. Given this Vue template snippet:
<input v-model.trim="username">
<p>User: {{ username }}</p>

If the user types alice (with spaces before and after) and then the input loses focus, what will be displayed inside the paragraph?
medium
A. User: alice
B. User: alice
C. ecila :resU
D. ecila :resU

Solution

  1. Step 1: Understand .trim modifier effect

    The .trim modifier removes whitespace from the start and end of the input value before updating the bound data.
  2. Step 2: Apply to input value

    The user input alice will be trimmed to alice before updating username.
  3. Final Answer:

    User: alice -> Option A
  4. Quick Check:

    .trim removes spaces around input [OK]
Hint: Trim removes spaces around input before update [OK]
Common Mistakes:
  • Assuming spaces remain in bound data
  • Confusing trim with lazy or number
  • Expecting trimming only on submit
4. Consider this Vue input:
<input v-model.number.lazy="score">

What is the main issue if the user types 42 but the bound score variable remains a string instead of a number?
medium
A. The .number modifier does not work with .lazy
B. The input event is not triggered because .lazy waits for change event
C. The score variable was initialized as a string and cannot change type
D. The modifiers are applied in the wrong order

Solution

  1. Step 1: Understand .lazy event timing

    The .lazy modifier updates the bound data only on the change event (when input loses focus), not on every input event.
  2. Step 2: Reason about .number conversion timing

    The .number modifier converts the value when the update happens. If the update hasn't happened yet (input still focused), score remains unchanged.
  3. Final Answer:

    The input event is not triggered because .lazy waits for change event -> Option B
  4. Quick Check:

    .lazy delays update, so number conversion waits [OK]
Hint: Lazy delays update; number converts only on update [OK]
Common Mistakes:
  • Thinking .number fails with .lazy
  • Believing variable type is fixed
  • Assuming modifier order matters here
5. You want to create a form input that updates the bound variable only when the user finishes typing and leaves the field, trims spaces, and converts the input to a number. Which of the following is the correct v-model usage?
hard
A.
B.
C.
D.

Solution

  1. Step 1: Understand modifier order importance

    Vue applies modifiers from left to right. The .lazy modifier must come first to delay update until change event.
  2. Step 2: Apply .trim and .number after .lazy

    After update triggers, .trim removes spaces, then .number converts to number before setting the variable.
  3. Final Answer:

    <input v-model.lazy.trim.number="value"> -> Option C
  4. Quick Check:

    Lazy first, then trim, then number [OK]
Hint: Put .lazy first, then .trim, then .number [OK]
Common Mistakes:
  • Placing .lazy last so update happens too early
  • Mixing modifier order causing wrong behavior
  • Assuming order does not affect result
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