首页 > 其他分享 >Vue中ref和$refs的介绍及使用

Vue中ref和$refs的介绍及使用

时间:2023-06-07 16:33:07浏览次数:36  
标签:Vue refs 元素 引用 组件 ref children

在JavaScript中需要通过document.querySelector("#demo")来获取dom节点,然后再获取这个节点的值。

在Vue中,我们不用获取dom节点,元素绑定ref之后,直接通过this.$refs即可调用,这样可以减少获取dom节点的消耗。

ref介绍:

 

ref被用来给元素或子组件注册引用信息。
引用信息将会注册在父组件的 $refs对象上。
如果在普通的 DOM 元素上使用,引用指向的就是 DOM 元素;
如果用在子组件上,引用就指向该子组件实例;
通俗的讲,ref特性就是为元素或子组件赋予一个ID引用,通过this.$refs.refName来访问元素或子组件的实例
<p ref="p">Hello</p>
<children ref="children"></children>

this.$refs.p
this.$refs.children

this.$refs介绍:

this.$refs是一个对象,持有当前组件中注册过 ref特性的所有 DOM 元素和子组件实例

注意: $refs只有在组件渲染完成后才填充,在初始渲染的时候不能访问它们,并且它是非响应式的,因此不能用它在模板中做数据绑定

当ref和v-for一起使用时,获取到的引用将会是一个数组,包含循环数组源

 

<template>
  <div>
    <div ref="myDiv" v-for="(item, index) in arr" :key="index">{{item}}</div>
  </div>
</template>
<script>
export default {
  data() {
    return {
      arr: ['one', 'two', 'three', 'four']
    }
  },
  mounted() {
    console.log(this.$refs.myDiv)
  },
  methods: {}
}
</script>

 

 实例:通过ref特性调用子组件的方法

(1)子组件

<template>
    <div>{{msg}}</div>
</template>
<script>
export default {
  data() {
    return {
      msg: '我是子组件'
    }
  },
  methods: {
    changeMsg() {
      this.msg = '变身'
    }
  }
}
</script>

(2)父组件

<template>
  <div @click="parentMethod">
    <children ref="children"></children>
  </div>
</template>
<script>
import children from 'components/children.vue'
export default {
  components: { 
    children 
  },
  data() {
    return {}
  },
  methods: {
    parentMethod() {
      this.$refs.children  //返回一个对象
      this.$refs.children.changeMsg() // 调用children的changeMsg方法
    }
  }
}
</script>

参考:https://blog.csdn.net/qq_38128179/article/details/88876060

标签:Vue,refs,元素,引用,组件,ref,children
From: https://www.cnblogs.com/wongzzh/p/17461170.html

相关文章

  • provide / inject替代 Vuex
    provide/inject可以解决上述弊端A.vue–>B.vue,用法://A.vueexportdefault{provide:{name:'Aresn'}}//B.vueexportdefault{inject:['name'],mounted(){console.log(this.name);//Aresn}}provide/inject替代VuexVuex做状态管理,它是一个专为......
  • vue之vue-cli创建项目、vue项目目录结构、vue项目编写规范、 es6导入导出语法
    目录一、vue-cli创建项目1.1、背景知识单页面应用:spa单文件组件(一个组件一个文件)一个组件中有的东西使用vue-cli创建vue项目,才能使用单文件组件vue-cli脚手架,1.2使用vue-cli创建vue项目1.3vue-cli创建项目vue-cli命令行创建项目使用vue-cli-ui创建运行vue项目方式一:命令行中......
  • Electron+vue+element ui+vscode+git桌面程序-小白篇 超详细
    一.说明背景:有需求,要求做一个简单的桌面程序。调研后决定采用:web方式写页面,然后打包为桌面程序选技术为:Nodejs+Electron+vue+elementui+vscode+git二.环境Node.js应用基于js,所以需要先安装Node.js。(建议LTS)下载地址:https://nodejs.org/zh-cn/download/ 下载完成后,傻瓜式一键安装......
  • Vue3 之 响应式 API reactive、 effect源码,详细注释
    Vue3之响应式APIreactive、effect源码,详细注释目录一.实现响应式API:reactive、shallowReactive、readonly、shallowReadonly1.针对不同的API创建不同的响应式对象2.实现createReactiveObject3.实现不同的拦截函数baseHandlers.ts二.实现响应式effect1.创建响应式的......
  • vue3 mock接口
    以下基于mock的vite-plugin-mock版本为2.9.6实现,其他版本有可能导致报错1.安装依赖:https://www.npmjs.com/package/[email protected].在vite.config.js配置文件启动插件//mock插件提供的方法import{viteMockServe}f......
  • 直播平台制作,vue + element ui 实现前端分页
    直播平台制作,vue+elementui实现前端分页一、DOM结构 <el-pagination@size-change="handleSizeChange"   @current-change="handleCurrentChange"   :current-page="currentPage"   :page-sizes="[5,10,15,30]"   :page-siz......
  • vue3使用ElementPlus的消息el-message样式不生效或者被遮盖(z-index)
    一、el-message自定义样式不生效想改弹出框的位置时不生效,使用了el-message的自定义类的custom-class属性也不行。原因应该是加了scoped后使用到里面样式的dom会添加data-v-xxxx这种属性防止css污染,但是message生成的dom是没有添加data-v-xxx属性的,所以样式无效。解决方式:js动态设......
  • Vue2项目开发时遇到:<template v-for> key should be placed on the <template> tag
    问题缘由:Vue2和Vue3中,对待template中存在v-for行为的组件正好相反Vue2中key必须写在子元素中,Vue3中key必须写在template中,不然会报错使用volar插件,使用Vue3语法检测代码,导致错误 解决方案:1、禁用volar2、貌似可以修改配置项,但尚未尝试......
  • vue常见自定义指令
    常见自定义指令一、响应缩放指令使用<divv-resize="resize"></div>代码/***响应缩放指令*@direction使用该指令可以响应元素宽高改变时执行的方法。*@resize{function}传入对应resize方法*v-resize="resize"**/exportdefault{bind(el,bi......
  • vue3使用知识点笔记大全
    vue3使用知识点笔记大全 一、vue3项目搭建[email protected] 使用elementplusui框架npmi-Selementplus//全部引入importElementPlusfrom'element-plus';import'element-plus/dist/index.css';constV......