Vue Template Refs

Vue Template Refs are used to refer to specific DOM elements.

When the ref attribute is set on an HTML tag, the resulting DOM element is added to the $refs object.

We can use the ref attribute and the $refs object in Vue as an alternative to methods in plain JavaScript like getElementById() or querySelector().

The 'ref' Attribute and The '$refs' Object

HTML tags with the ref attribute will be added to the $refs object and can be reached later from inside the <script> tag.

Example

The text inside a <p> element is changed.

App.vue:

<template>
  <h1>Example</h1>
  <p>Click the button to put "Hello!" as the text in the green p element.</p>
  <button @click="changeVal">Change Text</button>
  <p ref="pEl">This is the initial text</p>
</template>

<script>
  export default {
    methods: {
      changeVal() {
        this.$refs.pEl.innerHTML = "Hello!";
      }
    }
  }
</script>
Run Example »

Below is another example where the $refs object is used to copy the value of one tag into another tag.

Example

The text from the first <p> tag is copied into the second <p> tag.

App.vue:

<template>
  <h1>Example</h1>
  <p ref="p1">Click the button to copy this text into the paragraph below.</p>
  <button @click="transferText">Transfer text</button>
  <p ref="p2">...</p>
</template>

<script>
  export default {
    methods: {
      transferText() { 
        this.$refs.p2.innerHTML = this.$refs.p1.innerHTML;
      }
    }
  };
</script>
Run Example »

Get The Input Value from '$refs'

We can go further into an HTML element added to the $refs object to access any property we want.

Example

A <p> element gets the same content as what's being written in the input field.

App.vue:

<template>
  <h1>Example</h1>
  <p>Start writing inside the input element, and the text will be copied into the last paragraph by the use of the '$refs' object.</p>
  <input ref="inputEl" @input="getRefs" placeholder="Write something..">
  <p ref="pEl"></p>
</template>

<script>
  export default {
    methods: {
      getRefs() { 
        this.$refs.pEl.innerHTML = this.$refs.inputEl.value;
      }
    }
  };
</script>
Run Example »

'ref' with v-for

HTML elements created with v-for, with the ref attribute, will be added to the $refs object as an array.

Example

The button reveals the the third list element stored as an array element inside the $refs object.

App.vue:

<template>
  <h1>Example</h1>
  <p>Click the button to reveal the 3rd list element stored as an array element in the $refs object.</p>
  <button @click="getValue">Get the 3rd list element</button><br>
  <ul>
    <li v-for="x in liTexts" ref="liEl">{{ x }}</li>
  </ul>
  <pre>{{ thirdEl }}</pre>
</template>

<script>
  export default {
    data() {
      return {
        thirdEl: ' ',
        liTexts: ['Apple','Banana','Kiwi','Tomato','Lichi']
      }
    },
    methods: {
      getValue() { 
        this.thirdEl = this.$refs.liEl[2].innerHTML;
        console.log("this.$refs.liEl = ",this.$refs.liEl);
      }
    }
  };
</script>

<style>
pre {
  background-color: lightgreen;
  display: inline-block;
}
</style>
Run Example »

Vue Exercises

Test Yourself With Exercises

Exercise:

Refs are used to refer to specific DOM elements.

Supply the missing code so that 'Hello World' is displayed in the second <p> tag when the application is mounted.

<template>
  <p>This is just some text.</p>
  <p >This is the initial text</p>
</template>

<script>
  export default {
    mounted() {
      this..pEl.innerHTML = "Hello World!";
    }
  };
</script>

Start the Exercise



Copyright 1999-2023 by Refsnes Data. All Rights Reserved.