定义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. 打卡node day01--基础和fs内置模块

    一, 检查 node 版本 node -v 或 node --version 二,检查安装过的node 版本(nvm node 版本管理工具  安装链接 参考百度) nvm ls 三,切换node 版 ...

  2. VUE学习-生命周期

    生命周期 函数 描述 beforeCreate 在实例初始化之后,数据观测 (data observer) 和 event/watcher 事件配置之前被调用. created 在实例创建完成后被立即 ...

  3. CRLF和LF的差异

    CRLF, LF 是用来表示文本换行的方式.CR(Carriage Return) 代表回车,对应字符 '\r':LF(Line Feed) 代表换行,对应字符 '\n'.由于历史原因,不同的操作系统 ...

  4. Software--电商平台系统--P3 Product Catalogy 商品目录模块

    2018-01-15  15:25:20 商品目录 服务层 控制器层 ProductCate 服务层 Controller 控制器层

  5. TypeScript - 安装,类型

    // 要使用typescript需要全局安装 通过tsc -v 来验证是否安装成功 npm i -g typescript// ts 文件中完全可以写js语法, 完全兼容js // ts 本身在运行时 ...

  6. linux挂载文件服务器

    smbclient -L //192.168.1.1/ -U administrator //直接挂载 使用下面这条命令就行 sudo mount -t cifs -o username=文件服务器账 ...

  7. Windows D3D渲染到纹理

    D3D渲染到纹理 1 #include <d3dx9.h> 2 3 //---------------------------------------------------------- ...

  8. 新手:git回滚代码,合并代码解决冲突

    回滚到某个tag: git reset --hard 70438034dc git push -f 合并---解决冲突---提交: Step 1. Fetch and check out the br ...

  9. MBR和gpt说明

    1.MBR MBR的全称是Master Boot Record(主引导记录),MBR早在1983年IBM PC DOS 2.0中就已经提出.之所以叫"主引导记录",是因为它是存在于 ...

  10. md5加密中文windows和linux不一致

    测试环境springboot md5加密结果不一致 linux启动的时候 java -Dfile.encoding=utf-8 -jar xxx.jar   即可.主要是编码不一致导致.