Vue 2中的ref属性

简介: 从基础到实战,我们一环都不要少!

ref

ref 是 Vue 2 中一个重要的属性,用于在组件中获取对 DOM 元素或子组件的引用。通过 ref,你可以在组件内部直接操作或访问这些元素或子组件。

在 Vue 2 中,可以将 ref 添加到元素、组件或子组件的标签上。然后,你可以通过组件实例的 $refs 对象来访问这些引用。

下面是一个示例,展示了如何在 Vue 2 中使用 ref 属性:

<template>
  <div>
    <h2>父组件</h2>
    <button @click="logMessage">打印子组件的消息</button>
    <ChildComponent ref="childRef"></ChildComponent>
  </div>
</template>

<script>
import ChildComponent from './ChildComponent.vue';

export default {
    
  components: {
    
    ChildComponent,
  },
  methods: {
    
    logMessage() {
    
      const message = this.$refs.childRef.message;
      console.log(message);
    },
  },
};
</script>

在上述代码中,父组件通过 <ChildComponent> 标签引入了子组件,并使用 ref 属性为子组件创建了一个引用,即 childRef。

通过在父组件的 methods 中定义 logMessage 方法,我们可以通过 this.$refs.childRef 来访问子组件的实例,进而获取子组件内部的属性或方法。在这个示例中,我们通过 childRef.message 获取了子组件的 message 属性,并将其打印到控制台上。

通过 ref,我们可以在父组件中直接操作子组件的属性或方法,从而实现组件之间的通信和交互。

需要注意的是,ref 只能作用在组件标签上,不能用于在 v-for 循环中引用多个子组件。如果要在循环中使用 ref,你可以将它放在包裹每个子组件的容器元素上,并通过容器元素的索引来访问相应的子组件引用。

实战

如何使用 ref 实现组件之间的通信和交互。

父组件 ParentComponent.vue:

<template>
  <div>
    <h2>父组件</h2>
    <button @click="incrementCounter">增加计数器</button>
    <ChildComponent ref="childRef"></ChildComponent>
  </div>
</template>

<script>
import ChildComponent from './ChildComponent.vue';

export default {
    
  components: {
    
    ChildComponent,
  },
  methods: {
    
    incrementCounter() {
    
      this.$refs.childRef.increment();
    },
  },
};
</script>

子组件 ChildComponent.vue:

<template>
  <div>
    <h3>子组件</h3>
    <p>计数器:{
  { counter }}</p>
    <button @click="increment">增加计数器</button>
  </div>
</template>

<script>
export default {
    
  data() {
    
    return {
    
      counter: 0,
    };
  },
  methods: {
    
    increment() {
    
      this.counter++;
    },
  },
};
</script>

在上述案例中,父组件通过 <ChildComponent> 标签引入了子组件,并使用 ref 属性为子组件创建了一个引用,即 childRef。

父组件中的 incrementCounter 方法会调用子组件的 increment 方法,从而增加子组件中的计数器。

子组件内部有一个计数器 counter,并提供了 increment 方法来增加计数器的值。

通过 ref 的引用,父组件可以直接调用子组件内的方法,实现了父子组件之间的通信和交互。

当点击父组件中的 "增加计数器" 按钮时,父组件会调用子组件的 increment 方法,从而增加子组件的计数器。子组件的计数器值会被更新,并在模板中显示出来。

这个案例展示了使用 ref 实现父子组件之间的通信和交互的方式。通过 ref,我们可以在父组件中直接操作子组件,调用子组件的方法或获取子组件的属性,实现了组件之间的数据传递和状态管理。

如何在 v-for 循环中使用 ref

<template>
  <div>
    <h2>父组件</h2>
    <div v-for="(item, index) in items" :key="index" ref="childRefs">
      <ChildComponent :item="item"></ChildComponent>
    </div>
    <button @click="logMessages">打印子组件的消息</button>
  </div>
</template>

<script>
import ChildComponent from './ChildComponent.vue';

export default {
    
  components: {
    
    ChildComponent,
  },
  data() {
    
    return {
    
      items: ['Apple', 'Banana', 'Orange'],
    };
  },
  methods: {
    
    logMessages() {
    
      this.$refs.childRefs.forEach((ref, index) => {
    
        console.log(`子组件 ${index + 1} 的消息:${ref.$refs.childRef.message}`);
      });
    },
  },
};
</script>

在上述代码中,父组件使用 v-for 循环渲染了多个子组件,并通过 <div> 标签作为容器元素进行包裹。ref 属性被应用在每个容器元素上,即 ref="childRefs"。

在父组件的 logMessages 方法中,我们可以通过 this.$refs.childRefs 获取所有子组件容器元素的引用。然后,我们遍历这些引用,并通过 ref.$refs.childRef 来访问每个子组件实例。在本例中,子组件有一个名为 message 的属性,我们可以通过 ref.$refs.childRef.message 来获取每个子组件的消息。

当点击 "打印子组件的消息" 按钮时,父组件会遍历所有子组件容器元素的引用,并打印每个子组件的消息到控制台上。

通过在容器元素上使用 ref,我们可以在 v-for 循环中访问多个子组件的引用,实现对每个子组件的操作和交互。


谢谢款待

目录
相关文章
|
11月前
|
人工智能 JavaScript 算法
Vue 中 key 属性的深入解析:改变 key 导致组件销毁与重建
Vue 中 key 属性的深入解析:改变 key 导致组件销毁与重建
1125 0
|
存储 数据采集 供应链
属性描述符初探——Vue实现数据劫持的基础
属性描述符还有很多内容可以挖掘,比如defineProperty与Proxy的区别,比如vue2与vue3实现数据劫持的方式有什么不同,实现效果有哪些差异等,这篇博文只是入门,以后有时间再深挖。 博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
|
存储 缓存 JavaScript
如何在大型 Vue 应用中有效地管理计算属性和侦听器
在大型 Vue 应用中,合理管理计算属性和侦听器是优化性能和维护性的关键。本文介绍了如何通过模块化、状态管理和避免冗余计算等方法,有效提升应用的响应性和可维护性。
|
API
vue3知识点:reactive对比ref
vue3知识点:reactive对比ref
190 3
|
前端开发 JavaScript
简记 Vue3(一)—— setup、ref、reactive、toRefs、toRef
简记 Vue3(一)—— setup、ref、reactive、toRefs、toRef
|
JavaScript API
vue3知识点:ref函数
vue3知识点:ref函数
332 2
|
监控 JavaScript 开发者
在 Vue 中,子组件为何不可以修改父组件传递的 Prop,如果修改了,Vue 是如何监控到属性的修改并给出警告的
在 Vue 中,子组件不能直接修改父组件传递的 Prop,以确保数据流的单向性和可预测性。如果子组件尝试修改 Prop,Vue 会通过响应式系统检测到这一变化,并在控制台发出警告,提示开发者避免这种操作。
|
JavaScript 前端开发 开发者
VUE学习一:初识VUE、指令、动态绑定、计算属性
这篇文章主要介绍了Vue.js的基础知识,包括初识Vue、指令如v-for、v-on的使用、动态属性绑定(v-bind)、计算属性等概念与实践示例。
197 1
|
缓存 JavaScript 前端开发
探索Vue.js中的计算属性与侦听器
【10月更文挑战第5天】探索Vue.js中的计算属性与侦听器
289 1
|
缓存 JavaScript Serverless
vue中computed计算属性、watch侦听器、methods方法的区别以及用法
vue中computed计算属性、watch侦听器、methods方法的区别以及用法
867 0