定义2个组件:

子组件ChildrenSubRef.vue:

 1 <template>
2 <div>
3
4 </div>
5 </template>
6
7 <script>
8 export default {
9 name: "ChildrenSubRef",
10 data() {
11 return {
12 data1: {
13 a: 111,
14 b: 222
15 },
16 data2: {
17 c: 333,
18 d: 444
19 }
20 }
21 },
22 methods: {
23 getSub1() {
24 return this.$data
25 },
26 getSub2() {
27 console.log('执行子组件方法 getSub2')
28 }
29 }
30 }
31 </script>

父组件ParentDemoRefs.vue:

 1 <template>
2 <div>
3 <h2 @click="getRefB">getRefB</h2>
4 <h2 @click="getRefB_func">getRefB_func</h2>
5 <h2 @click="getRefB_Data">getRefB_Data</h2>
6 <div ref="refA">hello</div>
7 <ChildrenSubRef ref="refB"/>
8 </div>
9 </template>
10
11 <script>
12 import ChildrenSubRef from "@/components/ChildrenSubRef.vue";
13
14 export default {
15 name: "ParentDemoRefs",
16 components: {
17 ChildrenSubRef
18 },
19 methods: {
20
21 getRefB() {
22 console.log(this.$refs.refB)
23 },
24 getRefB_func() {
25 this.$refs.refB.getSub2()
26 },
27 getRefB_Data() {
28 console.log(this.$refs.refB.getSub1())
29 }
30 }
31 };
32 </script>

ref:

我们可以给任意dom或组件附加上ref属性

像这样,只需要在标签上机上属性ref即可,名字可DIY

1 <div ref="refA">hello</div>
2 <ChildrenSubRef ref="refB"/>

$refs:

上面定义的一个或多个含有ref属性的dom元素或组件,在当前组件实例化后会将它们写入组件实例的属性$refs,$refs是一个集合,

页面有一个ref就有一个元素在里面,而实际上$refs里的每个ref都指向它的实例

访问this.$refs.refA 就可以访问到这个refA所在的dom:

<div>hello</div>

访问this.$refs.refB 就可以访问到这个refB所在的Vue组件实例:

在父组件能拿到子组件的实例,就像在子组件中访问子组件实例一样,那就明白ref能干嘛了

可以在父组件访问子组件的数据或方法:

执行子组件方法:

this.$refs.refB.getSub1()

由此看来,$refs提供了访问子组件的一种途径,可以根据实际开发需要使用

Vue中 ref、$refs区别与使用的更多相关文章

  1. vue中使用refs定位dom出现undefined?

    之前在公司做项目,一直感觉用ref来定位dom节点挺方便的.但是期间遇到了一个问题,就是在mounted(){}钩子里面使用this.$refs.xxx,打印出来的却是undefined? 于是我就对 ...

  2. Vue.js-11:第十一章 - Vue 中 ref 的使用

    一.前言 在之前的前端开发中,为了实现我们的需求,通常采用的方案是通过 JS/Jquery 直接操纵页面的 DOM 元素,得益于 Jquery 对于 DOM 元素优异的操作能力,我们可以很轻易的对获取 ...

  3. typescript无法识别vue中的$refs

    例如:vue-fullscreen <template> <div class="Test"> <fullscreen ref="fulls ...

  4. 17、前端知识点--Vue中ref的使用

    methods里面的方法,需要手动触发才会执行. 如果想让页面一上来就执行的话,就需要写在mounted这个钩子函数中. <body> <div id="app" ...

  5. vue中this.$refs可以拿到,但是里面的属性undefind的问题

    1.和vue的生命周期有关,必须要在从mounted开始拿,才能拿得到里面的Dom元素 2.想在element ui 对话框打开后取dom时,应该使用$nextTick,而不是直接使用this.$re ...

  6. vue 中 assets 和 static 的区别

    Vue中的静态资源管理(src下的assets和static文件夹的区别)

  7. vue中$refs的使用

    vue中$refs获取组件或元素: 获取的元素就相当于是一个原生获取的元素,可以进行操作 this.$refs.ele.style.color = 'red

  8. vue中extend/component/mixins/extends的区别

    vue中extend/component/mixins/extends的区别 教你写一个vue toast弹窗组件 Vue.extend构造器的延伸

  9. vue中$mount与el区别

    vue中的$mount和el两者在使用中没有什么区别,都是将实例化后的vue挂载到指定的DOM元素中 用法: 如果在实例化vue时指定el,则该vue将会渲染在el对应的DOM中 反之 没有指定el, ...

  10. ElementUI(vue UI库)、iView(vue UI库)、ant design(react UI库)中组件的区别

    ElementUI(vue UI库).iView(vue UI库).ant design(react UI库)中组件的区别: 事项 ElementUI iView ant design 全局加载进度条 ...

随机推荐

  1. Harbor离线安装

    一.安装docker-compose 1-1. #安装方式一 curl -SL https://github.com/docker/compose/releases/download/v2.11.2/ ...

  2. Word06 黑客技术office真题

    1.课程的讲解之前,先来对题目进行分析,首先需要在考生文件夹下,将Wrod素材.docx文件另存为Word.docx,后续操作均基于此文件,否则不得分. 2.这一步非常的简单,打开下载素材文件,在[文 ...

  3. 安卓开发学习10-1:数据存储:Shared Preferences存储

    解析 什么是Shared Perferences 应用场景 配置信息 主题信息 游戏的积分信息等 存储路径 在本应用中的data-data-应用包-自定义名称xml文件下保存写入的数据信息 使用 获取 ...

  4. 小程序ios设置map圆角不生效的问题解决方案

    给map组件加个view外框,设置如下样式即可 border-radius:10rpx; overflow:hidden; transform: translateY(0);

  5. pandas学习记要

    本文翻译自文章: Pandas Cheat Sheet - Python for Data Science,同时添加了部分注解. 对于数据科学家,无论是数据分析还是数据挖掘来说,Pandas是一个非常 ...

  6. 在Windows系统上安装和配置Jenkins自动发布

    一.安装jenkins的流程转载于: https://www.jianshu.com/p/de9c4f5ae7fa 二.在window中执行批处理文件bat或者powershell可以成功,但是Jen ...

  7. Ajax 后台传值接收方法

    $.ajax({ method: 'post', //数据类型 url: 'service.ashx?method=PostFile', //传输页面和页面方法 dataType: "jso ...

  8. prophet安装(ubuntu16 python3.6)

    ubuntu16 python3.6 (ubuntu16自带的python3是3.5 升级至3.6可参考https://blog.csdn.net/weixin_42544006/article/de ...

  9. 第08组Beta冲刺(3/4)

    队名 八组评分了吗 组长博客链接(2分) 组员1李昕晖(组长) 过去两天完成了哪些任务 文字/口头描述 了解各个小组的进度与难以攻破的地方,晚上安排开会,安排新的冲刺任务. 重新分配小组及个人任务. ...

  10. sql 错误问题

    message: ### Error querying database.  Cause: java.sql.SQLSyntaxErrorException: SELECT command denie ...