Bird
Raised Fist0
Vueframework~5 mins

Creating custom directives in Vue - Quick Revision & Summary

Choose your learning style10 modes available
Recall & Review
beginner
What is a custom directive in Vue?
A custom directive in Vue is a way to add reusable behavior to DOM elements, like changing styles or handling events, beyond what components do.
Click to reveal answer
beginner
How do you register a global custom directive in Vue 3?
Use app.directive('name', { mounted(el, binding) { /* code */ } }) where app is your Vue application instance.
Click to reveal answer
intermediate
What are the lifecycle hooks available in Vue 3 custom directives?
The main hooks are <code>created</code>, <code>beforeMount</code>, <code>mounted</code>, <code>beforeUpdate</code>, <code>updated</code>, <code>beforeUnmount</code>, and <code>unmounted</code>. They let you run code at different stages of the directive's life.
Click to reveal answer
intermediate
What does the binding argument provide in a directive hook?
It gives info about the directive usage like value (passed value), oldValue, arg (argument), and modifiers (special flags).
Click to reveal answer
beginner
Why use custom directives instead of components for DOM manipulation?
Custom directives are better for low-level DOM tasks like focusing an input or changing styles, where components would be too heavy or complex.
Click to reveal answer
Which Vue 3 directive hook runs when the element is inserted into the DOM?
Aupdated
Bmounted
Ccreated
DbeforeUnmount
How do you access the value passed to a custom directive in its hook?
Athis.value
Bel.value
Cbinding.value
Ddirective.value
Which of these is NOT a valid lifecycle hook for Vue 3 custom directives?
AbeforeDestroy
Bmounted
CbeforeMount
Dunmounted
What is the purpose of the modifiers property in the binding object?
ATo access the parent component's data
BTo store the element's CSS classes
CTo hold the directive's name
DTo pass extra flags to customize directive behavior
Where do you register a local custom directive in a Vue component?
AInside the <code>directives</code> option of the component
BIn the <code>methods</code> section
CIn the <code>data</code> option
DIn the <code>template</code> only
Explain how to create and use a simple custom directive in Vue 3 that changes the background color of an element.
Think about how you tell Vue to do something special when the element appears.
You got /4 concepts.
    Describe the role of the binding object in Vue custom directives and what information it provides.
    It's like a package of info about how the directive is used.
    You got /4 concepts.

      Practice

      (1/5)
      1. What is the main purpose of creating a custom directive in Vue?
      easy
      A. To add reusable behavior to HTML elements
      B. To define new components
      C. To manage Vuex state
      D. To handle routing between pages

      Solution

      1. Step 1: Understand what directives do in Vue

        Directives are special markers on elements that tell Vue to do something with that element.
      2. Step 2: Identify the role of custom directives

        Custom directives let you add reusable behavior to elements, like focusing an input or changing styles dynamically.
      3. Final Answer:

        To add reusable behavior to HTML elements -> Option A
      4. Quick Check:

        Custom directives = reusable element behavior [OK]
      Hint: Custom directives add behavior to elements, not components [OK]
      Common Mistakes:
      • Confusing directives with components
      • Thinking directives manage app state
      • Assuming directives handle routing
      2. Which of the following is the correct syntax to register a global custom directive named v-focus in Vue 3?
      easy
      A. Vue.directive('v-focus', function(el) { el.focus() })
      B. app.directive('focus', { mounted(el) { el.focus() } })
      C. app.directive('v-focus', { bind(el) { el.focus() } })
      D. Vue.createDirective('focus', { mounted(el) { el.focus() } })

      Solution

      1. Step 1: Recall Vue 3 global directive registration

        In Vue 3, you use the app instance's directive method with the directive name without the 'v-' prefix.
      2. Step 2: Check the lifecycle hook and syntax

        The correct hook for when the element is inserted is 'mounted', and the function receives the element as argument.
      3. Final Answer:

        app.directive('focus', { mounted(el) { el.focus() } }) -> Option B
      4. Quick Check:

        Vue 3 global directive = app.directive('name', { mounted }) [OK]
      Hint: Use app.directive('name', { mounted }) without 'v-' prefix [OK]
      Common Mistakes:
      • Including 'v-' prefix in directive name
      • Using Vue.directive instead of app.directive in Vue 3
      • Using deprecated hooks like 'bind'
      3. Given this custom directive registered globally in Vue 3:
      app.directive('color', {
        mounted(el, binding) {
          el.style.color = binding.value
        },
        updated(el, binding) {
          el.style.color = binding.value
        }
      })
      What will be the text color of the paragraph after the component updates if used as <p v-color="'red'">Hello</p> and later the binding value changes to 'blue'?
      medium
      A. The text color will be black (default)
      B. The text color will remain red
      C. The text color will change to blue
      D. There will be a runtime error

      Solution

      1. Step 1: Understand directive lifecycle hooks

        The 'mounted' hook sets the color initially, and the 'updated' hook runs when the binding value changes.
      2. Step 2: Trace the color change on update

        When the binding value changes to 'blue', the 'updated' hook sets the element's color style to 'blue'.
      3. Final Answer:

        The text color will change to blue -> Option C
      4. Quick Check:

        updated hook changes color to new binding value [OK]
      Hint: updated hook runs on binding change to update element [OK]
      Common Mistakes:
      • Assuming color stays as initial value
      • Ignoring the updated lifecycle hook
      • Thinking directive causes errors on update
      4. Consider this custom directive code snippet in Vue 3:
      app.directive('tooltip', {
        mounted(el, binding) {
          el.setAttribute('title', binding.value)
        },
        updated(el, binding) {
          el.setAttribute('title', binding.oldValue)
        }
      })
      What is the problem with this directive when the binding value changes?
      medium
      A. The tooltip title does not update to the new value
      B. The directive causes a syntax error
      C. The title attribute is removed on update
      D. The directive works correctly with no issues

      Solution

      1. Step 1: Analyze the updated hook usage

        The updated hook sets the title attribute to binding.oldValue, which is the previous value, not the new one.
      2. Step 2: Understand the effect on the tooltip

        Because it sets the old value on update, the tooltip does not reflect the new binding value after change.
      3. Final Answer:

        The tooltip title does not update to the new value -> Option A
      4. Quick Check:

        updated hook must use binding.value, not binding.oldValue [OK]
      Hint: Use binding.value in updated hook, not binding.oldValue [OK]
      Common Mistakes:
      • Using binding.oldValue instead of binding.value on update
      • Assuming no update needed for title
      • Confusing syntax error with logic error
      5. You want to create a custom directive v-auto-focus that automatically focuses an input element only when it is inserted into the DOM and not on updates. Which is the best way to implement this directive in Vue 3?
      hard
      A. Use the created hook to call el.focus()
      B. Use the updated hook to call el.focus() every time the binding changes
      C. Use both mounted and updated hooks to call el.focus()
      D. Use the mounted hook to call el.focus() and leave updated empty

      Solution

      1. Step 1: Identify when to focus the element

        The input should be focused only once when inserted, so the 'mounted' hook is the right place.
      2. Step 2: Avoid focusing on updates

        Calling focus in 'updated' would focus repeatedly, which is not desired.
      3. Step 3: Understand Vue 3 lifecycle hooks

        There is no 'created' hook for directives; 'mounted' is the earliest for DOM access.
      4. Final Answer:

        Use the mounted hook to call el.focus() and leave updated empty -> Option D
      5. Quick Check:

        Focus on mounted only, not updated [OK]
      Hint: Focus in mounted hook only to avoid repeated focusing [OK]
      Common Mistakes:
      • Focusing in updated hook causing repeated focus
      • Using non-existent created hook for directives
      • Calling focus multiple times unnecessarily
      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