Vue 模板参考

Vue模板参考用于引用特定的 DOM 元素。

当。。。的时候ref属性在 HTML 标记上设置,生成的 DOM 元素将添加到$refs目的。

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

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

HTML 标签带有ref属性将被添加到$refs对象,并且可以稍后从内部到达<script>标签。

示例

里面的文字是a<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对象访问我们想要的任何属性。

示例

<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

HTML 元素创建于v-for,与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练习

通过练习测试一下

练习:

Refs 用于引用特定的 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>

开始练习