Vue 'ref' 属性


示例

使用 ref 属性更改 <p> 标签内的文本:

<div id="app">
  <p ref="pEl">Initial text.</p>
  <button v-on:click="changeText">Change text</button>
</div>

<script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
<script type="module">
  const app = Vue.createApp({
    methods: {
      changeText(){
        this.$refs.pEl.innerHTML = "Hello!";
      }
    }
  })
  app.mount('#app')
</script>
亲自试一试 »

请参阅下面的更多示例。


定义和用法

ref 属性用于标记 <template> 中的元素,以便可以从 <script> 中的 $refs 对象访问它们。

我们可以使用 Vue 中的 ref 属性和 $refs 对象来替代 getElementById()querySelector() 等纯 JavaScript 中的方法。

如果使用 v-for 创建的 HTML 元素具有 ref 属性,则生成的 DOM 元素将作为数组添加到 $refs 对象中,如本例所示:

示例

<ul>
  <li v-for="x in liTexts" ref="liEl">{{ x }}</li>
</ul>
运行示例 »

更多示例

示例 1

<p> 元素内的文本已更改。

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

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

<style>
#pEl {
  background-color: lightgreen;
  display: inline-block;
}
</style>
运行示例 »

示例 2

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

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

示例 3

<p> 元素获取与输入字段中写入的内容相同的内容。

<template>
  <h1>示例</h1>
  <p>开始在输入元素内写入,文本将通过使用"$refs"对象复制到最后一段。</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>
运行示例 »

示例 4

该按钮显示作为数组元素存储在 $refs 对象内的第三个列表元素。

<template>
  <h1>示例</h1>
  <p>单击该按钮可显示作为数组元素存储在 $refs 对象中的第三个列表元素。</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 教程:Vue 模板参考

Vue 教程:Vue v-for 指令

Vue 参考:Vue $refs 对象