Menu
×
   ❮   
HTML CSS JAVASCRIPT SQL PYTHON JAVA PHP HOW TO W3.CSS C C++ C# BOOTSTRAP REACT MYSQL JQUERY EXCEL XML DJANGO NUMPY PANDAS NODEJS R TYPESCRIPT ANGULAR GIT POSTGRESQL MONGODB ASP AI GO KOTLIN SASS VUE DSA GEN AI SCIPY AWS CYBERSECURITY DATA SCIENCE
     ❯   

Vue 模板引用

Vue **模板引用** 用于引用特定 DOM 元素。

当在 HTML 标签上设置 **ref** 属性时,生成的 DOM 元素将添加到 **$refs** 对象中。

我们可以在 Vue 中使用 **ref** 属性和 **$refs** 对象作为在普通 JavaScript 中使用 getElementById() 或 querySelector() 方法的替代方法。

'ref' 属性和 '$refs' 对象

带有 **ref** 属性的 HTML 标签将被添加到 **$refs** 对象中,并且可以在后面的 **<script>** 标签中访问。

示例

更改 **<p>** 元素中的文本。

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>
运行示例 »

下面是另一个使用 **$refs** 对象将一个标签的值复制到另一个标签中的示例。

示例

第一个 **<p>** 标签中的文本将被复制到第二个 **<p>** 标签中。

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>
运行示例 »

从 '$refs' 获取输入值

我们可以进一步进入添加到 **$refs** 对象中的 HTML 元素以访问我们想要的任何属性。

示例

**<p>** 元素获取与输入字段中写入的文本相同的文本。

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>
运行示例 »

'ref' 与 v-for

使用 **v-for** 创建的 HTML 元素,带有 **ref** 属性,将作为数组添加到 **$refs** 对象中。

示例

按钮显示存储在 **$refs** 对象中的数组元素中的第三个列表元素。

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>
运行示例 »

Vue 练习

通过练习测试自己

练习

引用用于引用特定的 DOM 元素。

提供缺失的代码,以便在应用程序挂载时在第二个 <p> 标签中显示 'Hello World'。

<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>

开始练习



×

Contact Sales

If you want to use W3Schools services as an educational institution, team or enterprise, send us an e-mail:
[email protected]

Report Error

If you want to report an error, or if you want to make a suggestion, send us an e-mail:
[email protected]

W3Schools is optimized for learning and training. Examples might be simplified to improve reading and learning. Tutorials, references, and examples are constantly reviewed to avoid errors, but we cannot warrant full correctness of all content. While using W3Schools, you agree to have read and accepted our terms of use, cookie and privacy policy.

Copyright 1999-2024 by Refsnes Data. All Rights Reserved. W3Schools is Powered by W3.CSS.