概述

在这里插入图片描述

在 Vue 中使用 ref 的主要作用是允许你访问和操作 DOM 元素或组件实例。ref 允许你在 Vue 组件中获取对特定 DOM 元素或子组件实例的引用,以便可以进行以下操作:

直接访问和修改 DOM 元素的属性和内容:你可以使用 ref 来访问和修改特定 DOM 元素的属性、样式、内容等。这对于需要直接操作 DOM 元素的情况非常有用,例如,动态改变样式、内容或绑定事件。

访问子组件的实例:如果你在父组件中使用 ref 来引用子组件,你可以访问子组件的属性和方法。这使得父组件可以与子组件进行通信,调用子组件的方法或访问子组件的数据。

vue3代码块

<template>
  <div>
    <input type="text" ref="inputRef" value="1111" />
    <input type="text" ref="input2Ref">
    <span>123</span>
  </div>
</template>

<script>
import { ref, onMounted } from "vue";
export default {
  setup() {
    const inputRef = ref(null);

    onMounted(() => {
      console.log(inputRef.value); /** 这是inputDom */
      console.log(inputRef.value.value) /** 1111 */ 
    });
    return { inputRef };
  },
  mounted() {
    console.log(this.$refs.input2Ref)
  }
};
</script>

<style></style>

ref的本质是转为reactive

ref(18) 转为 reactive({value:18}

所以取值的时候比以前多一个.value。

注意

setup的执行期间是在 beforeCreate和created之间执行的,而这个时候dom还未被挂载,所以直接在setup中获取dom是不可能成功的,只能在setup的生命周期onMounted及以后获取dom。

在 Vue 3 中,你也可以通过 this.$refs 来访问这个 DOM 元素的引用,就像在 Vue 2 中一样。

vue2 获取ref

在 Vue 2 中,你可以使用 ref 来获取标签 DOM 元素的引用。以下是一些示例代码,展示如何使用 ref 获取 DOM 元素的引用:

<template>
  <div>
    <button @click="handleClick">获取标签DOM</button>
    <p ref="myParagraph">这是一个段落。</p>
  </div>
</template>

在上面的示例中,我们给 <p> 标签添加了一个 ref 属性,并赋予它一个名称,即 “myParagraph”。现在,我们可以在 Vue 组件中通过 this.$refs 来访问这个 DOM 元素的引用。

<script>
export default {
  methods: {
    handleClick() {
      // 获取DOM元素的引用
      const paragraphElement = this.$refs.myParagraph;
      
      // 在这里可以操作DOM元素
      paragraphElement.style.color = 'red';
    }
  }
}
</script>

在上面的示例中,我们使用 this.$refs.myParagraph 来访问 <p> 标签的 DOM 元素引用,并随后修改了它的文本颜色。这使你能够在 Vue 组件中方便地访问和操作 DOM 元素。

请注意,使用 ref 获取 DOM 元素的引用通常不是 Vue 的首选方式,因为 Vue 更鼓励数据驱动视图。如果可能,尽量使用 Vue 数据绑定和指令来修改视图,而不是直接操作 DOM 元素。然而,有时你可能需要直接访问 DOM 元素,这时 ref 是一个可行的选择。

vue 其它获取dom的方式

在 Vue 中,除了使用 ref 来获取 DOM 元素的引用之外,还可以使用其他方式来获取 DOM 元素。以下是一些常见的方法:

  1. 通过 $el 属性

    • 在 Vue 组件中,你可以通过访问 $el 属性来获取组件的根 DOM 元素。
    • 例如,在 Vue 组件的方法中,可以使用 this.$el 访问组件的根元素。
    this.$el.style.color = 'red'; // 修改组件的根元素样式
    
  2. 通过事件对象

    • 在事件处理程序中,事件对象(通常命名为 event)提供了 target 属性,它指向触发事件的 DOM 元素。
    • 这可以在事件处理程序内部使用,用来访问事件的目标元素。
    methods: {
      handleClick(event) {
        event.target.style.backgroundColor = 'green'; // 修改点击的元素的背景颜色
      }
    }
    
  3. 使用 document.querySelectordocument.querySelectorAll

    • 你可以使用标准的 DOM API 来通过选择器查询和获取 DOM 元素。
    • 这通常用于不在 Vue 组件内的情况,或在 Vue 组件之外的操作。
    const element = document.querySelector('#myElement'); // 通过id选择器获取元素
    const elements = document.querySelectorAll('.myClass'); // 通过类名选择器获取多个元素
    
  4. 通过自定义指令

    • 你可以创建自定义指令,以在 Vue 组件中处理 DOM 元素。这允许你以更高级的方式与 DOM 元素交互。
    • 自定义指令可以在全局或局部注册,然后在模板中使用。

这些方法提供了不同的方式来获取和操作 DOM 元素,你可以根据具体的需求和情境选择最适合的方法。不过,在 Vue 中使用 ref$el 是较为常见和方便的方式,特别是在组件内部。
在这里插入图片描述

Logo

前往低代码交流专区

更多推荐