目录

一、问题

二、解决方法

三、总结


一、问题

1.在选项式API中可以直接用 this.$refs.xxx来引用template中的DOM元素。

但是在组合式API setup中没有this,该如何用 ref获取到 DOM元素呢?

2.this.$refs.xxx获取DOM元素的方法

1)在dom上添加 ref="xxx",在方法中直接使用 this.$refs.xxx引用

2)代码

<template><div class="testdiv" ref="testdiv">测试一下</div>
</template>
<script>export default{mounted(){console.log("this.$refs.testdiv",this.$refs.testdiv,this.$refs.testdiv.innerHTML,this.$refs.testdiv.clientWidth)},}
</script>

3)结果

二、解决方法

1. 方法

 在DOM上添加 ref="xxx" ,在 setup中定义一个 和xxx名称完全相同的 ref响应式变量xxx,并且return出去。

则变量xxx.value就是DOM元素的引用。 直接使用xxx.value.functioname、xxx.value.attributename就可以获取DOM元素的方法或属性。

2. 代码

<template><div class="testdiv" ref="testdiv">测试一下</div>
</template>
<script>
import { defineComponent, ref, reactive, onMounted } from 'vue';export default defineComponent({setup(props, { emit, slots, attrs }) {const testdiv = ref(null);onMounted(() => {test();});const test = () => {console.log('testdiv', testdiv, testdiv.value.innerHTML, testdiv.value.clientWidth);};return{testdiv}}})
</script>

3.结果

图 2-1

4.注意不能使用 reactive 声明变量,使用reactive声明得不到DOM的引用,结果如图2-2所示

1)代码

<template><div class="testdiv" ref="testdiv">测试一下</div>
</template>
<script>
import { defineComponent, ref, reactive, onMounted } from 'vue';export default defineComponent({setup(props, { emit, slots, attrs }) {const testdiv = reactive({});onMounted(() => {test();});const test = () => {console.log("testdiv",testdiv,testdiv.innerHTML,testdiv.clientWidth)};return{testdiv}}})
</script>

2)结果

图 2-2

三、总结

1.setup中使用ref: DOM上添加ref="xxx",setup中定义一个 ref变量xxx,并且return出去,则xxx.value就是DOM的引用,可以用 xxx.value直接使用DOM元素里面的方法和属性

2.应用场景:ref主要用于在父组件中需要直接使用子组件的方法和属性

3.注:必须等到页面加载完之后才可以用 ref获取DOM,否则会报错的,找不到DOM。所以一般在函数中使用ref.

/*

希望对你有帮助!

如有错误,欢迎指正!非常感谢!

*/

setup中使用ref相关推荐

  1. Vue3 Composition API(二)——computed、watchEffect、setup中使用ref

    一.computed 在前面我们讲解过计算属性computed:当我们的某些属性是依赖其他状态时,我们可以使用计算属性来处理 在前面的Options API中,我们是使用computed选项来完成的: ...

  2. 使用customRef自定义ref,解决setup中处理异步问题。

    setup中不允许使用async.await使用customRef可以让请求到的数据自动获取响应式状态 详见下方demo <template><div>{{ num }}< ...

  3. vue3 setup中父组件通过Ref调用子组件的方法

    在setup()钩子函数中调用 父组件 <template><div>我是父组件<children ref="childrenRef" />&l ...

  4. Vue3学习之第四节:setup()中使用watch、watchEffect 函数

    一.watch 监听 import { ref, watch, reactive } from 'vue'export default {setup(){let str = ref('')let ms ...

  5. setup中使用watch

    watch属性监听器的作用在vue3.0中没有改变,还是监听值得变化. 在vue3.0中,仍然支持watch配置项.但是我们要在setup中使用watch得话,我们要导入watch的API,然后往wa ...

  6. compostion-api(setup中) watch使用细节

    目录 一.监听某一个对象 二.监听对象的一个属性 三.监听多个对象或对象的属性 四.组合式api 监听的到底是什么? 五.总结 前提(currentOperaMsg是一个响应式对象) 以下所述的wat ...

  7. Vue3中自定义ref

    文章目录 使用ref 使用customRef自定义ref 使用ref main.js import { createApp } from 'vue' import App from './App.vu ...

  8. 在 Inno Setup 中实现倒数N秒后激活按钮

    在 Inno Setup 中实现倒数N秒后激活按钮 原文 http://restools.hanzify.org/article.asp?id=67 timectrl.dll 为一个 6.5 KB 的 ...

  9. C#中关键字ref与out的区别(转)

    C#中关键字ref与out的区别(转) 在C#中,ref与out是很特殊的两个关键字.使用它们,可以使参数按照引用来传递. 总的来说,通常我们向方法中传递的是值.方法获得的是这些值的一个拷贝,然后使用 ...

最新文章

  1. java获取get请求返回_Java中处理调用第三方接口(post/get),该如何处理,返回的数据如何处理...
  2. myeclipse 删除历史工作空间记录
  3. 程序物语(六):探寻你的与众不同之处
  4. 安卓与ios都是linux,随便来说两句,安卓、IOS不是那么容易被取代的
  5. SD卡移植FAT32文件系统无MBR
  6. mysql 占用的解决_解决 MySQL 突然占用全部内存的问题
  7. 点击查询后在表格中获取控件的值
  8. 如何在对话框程序中让对话框捕获WM_KEYDOWN消息
  9. 循证医学 计算机辅助决策系统,循证医学重点整理
  10. Excel如何实现聚光灯效果
  11. oracle怎么看日志文件,Oracle日志文件的管理与查看
  12. Android WAP NET 区别
  13. 文件(1):文本文件、二进制文件、文件编码
  14. html如何设置banner,css设置banner图自适应的方法
  15. 宋浩《概率论与数理统计》自用笔记
  16. EasyMicroPlot: 一种快速进行微生物下游分析的整合R包
  17. 大数据开发之在idea中开发第一个hadoop程序
  18. 2021年4月品牌精选海报合集
  19. 网络工程数据通信课程设计之--校园小型网络规划与设计
  20. 前端-----之-----轮播

热门文章

  1. 如何实现从登陆界面跳转到游戏大厅界面
  2. 我的世界服务器物品如何虚转实,我的世界编辑器虚转实 | 手游网游页游攻略大全...
  3. 团体程序设计天梯赛-练习集——L1-063 吃鱼还是吃肉(类数组、方法定义和使用)
  4. Windows10与Windows7双系统
  5. Web前端期末大作业-物流快递公司网页设计(HTML+CSS+JS)
  6. matlab画频域横坐标,离散傅里叶变换频域横坐标问题
  7. 极速系列06—利用python批量发送邮件
  8. ur机械臂 控制器_优傲机器人,ur协作式机械手臂,ur机器人,ur协作机器人,ur官网_库崎智能...
  9. void main 和 int main的区别
  10. 弘辽科技:电商巨头发力下沉市场,展开激烈“追逐战”