定义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. P1062 [NOIP2006 普及组] 数列 题解

    目录 题目 思路 code 题目 P1062 [NOIP2006 普及组] 数列https://www.luogu.com.cn/problem/P1062 思路 先把 N 转换成 2 进制,再把这个 ...

  2. math公式手写识别网址

    math公式手写识别网址 参考:https://webdemo.myscript.com/views/math/index.html

  3. 对象转Map

    Map<String, Object> userMap = BeanUtil.beanToMap(userDTO);

  4. Mac怎么创建加密文件夹

    对于一些使用Mac工作生活有特殊要求以及职业要求有限制的用户来说,加密自己的工作内容以及隐私是非常重要的一件事情.往往用户需要加密的内容项目很多,这个时候我们就需要一个加密文件夹来包含这些内容.那么M ...

  5. Python3之并发(六)---线程池

    一.线程池 系统频繁的启动新线程,线程执行完被销毁,如果线程不能被重复使用,即每个线程都需要经过启动.销毁和运行3个过程,这必然会使得系统的性能急剧下降,线程池的意义就在于减少线程创建及消毁过程中损失 ...

  6. Python获取本地通达信软件的股票信息(一)

    说明 在量化计算中,经常需要取得类似最新的股票代码表等相关的股票信息.虽然可以网络上可以很容易获得这些信息,但当处于离线或网络状况不佳状态时,我们可以从诸如<通达信金融终端>之类的本地数据 ...

  7. swift 应用内切换语言

    1:在project info中的locations添加需要的语言 2:创建Localizable.strings文件 点击右边的localization勾选需要的语言 3:创建InfoPlist.s ...

  8. ArrayList 的toArray的转换数组方法的注意事项

    ArrayList 的toArray的转换数组方法的注意事项 toArray()一共有两个方法 toArray(T[] a) 和toArray() 源码是 进行使用toArray()方法时候,使用 ( ...

  9. redis部署集群时出现的问题(redis 版本 6.2.5)

    配置 redis 集群时(redis 版本 6.2.5),我使用了同一个 server 端运行3个不同的配置文件. 配置文件中只修改了端口号并打开了 cluster-enable. 脚本运行后什么提示 ...

  10. Python爬虫之Scrapy制作爬虫

    前几天我有用过Scrapy架构编写了一篇爬虫的代码案例深受各位朋友们喜欢,今天趁着热乎在上一篇有关Scrapy制作的爬虫代码,相信有些基础的程序员应该能看的懂,很简单,废话不多说一起来看看. 前期准备 ...