Vue3 组合式 API 中获取 DOM 节点的问题
模板引用
Vue 提供了许多指令让我们可以直接操作组件的模板。但是在某些情况下,我们仍然需要访问底层 DOM 元素。在模板中添加一个特殊的属性ref就可以得到该元素。
访问模板引用
<script setup>
import { ref } from 'vue';
const demo = ref(null);
onMounted(() => {
demo.value.style.width = '20px';
});
</script>
<template>
<div>
<span ref="demo">Hello Vue!</span>
</div>
</template>
访问模板引用的时机
访问的顺序上有讲究。因为ref本身是作为渲染函数的结果来创建的,必须等待组件挂载后才能对它进行访问。如果不再挂载之后进行访问,百分之九十九(还有百分之一是意外)都是 null 或 undefined 错误。看下图:

因此,在组合式 API 中获取了 ref 之后,最好在 onMounted 函数中进行后续的操作。把第四行代码const demo = ref(null)放到 onMounted 里进行,或者其他生命周期函数里都是不行的,必须要在 setup 里进行。(本人已经测试过了)
事件函数访问模板引用
这里的实际应用时的问题:模板中添加一个按钮,按钮绑定函数onclickButton,函数里访问模板引用,此时出现模板引用 null 和 undefined。正如上面所述,ref 要在组件挂载完成之后才可以访问,setup函数在组件挂载之前,因此事件函数定义在 setup 里就出现 null 或 undefined 错误。
并且,事件函数也许只能定义在 setup 里,按钮才可以绑定该函数。这是我测试过的,在onMounted中定义的函数无法被按钮绑定。
解决方案:
- 在
setup中定义对象 methods(或者其他你喜欢的变量名); - 在
onMounted函数中这样使用:
const demo = ref(null);
const methods = {};
onMounted(() => {
methods.onclickButton = () => {
demo.value.style.fontSize = "20px";
}
});
Vue3 组合式 API 中获取 DOM 节点的问题的更多相关文章
- 六、React 键盘事件 表单事件 事件对象以及React中的ref获取dom节点 、React实现类似Vue的双向数据绑定
接:https://www.cnblogs.com/chenxi188/p/11782349.html 事件对象 .键盘事件. 表单事件 .ref获取dom节点.React实现类似vue双向数据绑定 ...
- Vue 双向数据绑定、事件介绍以及ref获取dom节点
vue是一个MVVM的框架 M model V view MVVM model改变会影响视图view,view改变会影响model 双向数据绑定必须在表单里面使用 //我发现在谷歌浏览器翻译后的网页 ...
- Omi框架学习之旅 - 获取DOM节点 及原理说明
虽然绝大部分情况下,开发者不需要去查找获取DOM,但是还是有需要获取DOM的场景,所以Omi提供了方便获取DOM节点的方式. 这是官网的话,但是我一直都需要获取dom,对dom操作,所以omi提供的获 ...
- React对比Vue(03 事件的对比,传递参数对比,事件对象,ref获取DOM节点,表单事件,键盘事件,约束非约束组件等)
import React from 'react'; class Baby extends React.Component { constructor (props) { super(props) t ...
- vue3组合式API
vue3组合式API 为什么要用组合式API,我们来看看它是如何解决vue2的局限性的 1.vue2的局限性 当组件内容越来越多,逻辑越来越复杂,可读性就会降低,并且难以维护. vue2组件采用配置式 ...
- javascript中获取dom元素的高度和宽度
javascript中获取dom元素高度和宽度的方法如下: 网页可见区域宽: document.body.clientWidth网页可见区域高: document.body.clientHeight网 ...
- ionic2 获取dom节点
ionic2页面上面获取dom节点,可以直接用原生的方法,document.querySelector()等, 但是不建议这样使用,建议使用官方的.就是要在获取的节点上加上#name的属性(相当于ge ...
- vue的数据双向绑定和ref获取dom节点
vue是一个MVVM的框架 业务逻辑代码即js部分是model部分, html是view部分. 当model改变的时候,view也会改变 view 改变是,model也会改变 <template ...
- 原生JS获取DOM 节点到浏览器顶部的距离或者左侧的距离
关于js获取dom 节点到浏览器顶/左部的距离,Jquery里面有封装好的offset().top/offset().left,只到父级的顶/左部距离position().top/position() ...
随机推荐
- 理“ Druid 元数据”之乱
vivo 互联网大数据团队-Zheng Xiaofeng 一.背景 Druid 是一个专为大型数据集上的高性能切片和 OLAP 分析而设计的数据存储系统. 由于Druid 能够同时提供离线和实时数据的 ...
- React简单教程-4-事件和hook
前言 在上一章 React 简单教程-3-样式 中我们建立了一个子组件,并稍微美化了一下.在另一篇文章 React 简单教程-3.1-样式之使用 tailwindcss 章我们使用了 tailwind ...
- 数据分析工具Metabase--Metabase安装(最详细的安装教程)
Meatabase介绍 Metabase 是一款开源的BI工具.主要可以实现在线的可视化分析,单独生成分析图标,定时刷新数据集,权限管理,报告分享等一系列功能. Metabase支持多种市面上主流的数 ...
- Myers差分算法的理解、实现、可视化
作者:Oto_G QQ: 421739728 目录 简介 基础 差异的描述 好的差异比较 算法介绍 名词解释 两个定理 绘制编辑图 感谢 简介 本文章对Myers差分算法(Myers Diff Alg ...
- hibernate-validator的基本使用
validator是用来校验参数使用! 一般来说校验参数的工作可以放在前端去执行,但是假如有人不经过前端直接调用后端的接口呢?很可能就出现非法数据而导致一些问题,所有服务端也要做数据的校验. 前端校验 ...
- electron vue
vue create project vue add vue-cli-plugin-electron-builder node_modules\@vue\cli-service\lib\config\ ...
- C#中的枚举器
更新记录 本文迁移自Panda666原博客,原发布时间:2021年6月28日. 一.先从可枚举类型讲起 1.1 什么是可枚举类型? 可枚举类型,可以简单的理解为: 有一个类,类中有挺多的数据,用一种统 ...
- 基于Kubernetes v1.24.0的集群搭建(三)
1 使用kubeadm部署Kubernetes 如无特殊说明,以下操作可以在所有节点上进行. 1.1 首先我们需要配置一下阿里源 cat <<EOF > /etc/yum.repos ...
- 面试突击60:什么情况会导致 MySQL 索引失效?
为了验证 MySQL 中哪些情况下会导致索引失效,我们可以借助 explain 执行计划来分析索引失效的具体场景. explain 使用如下,只需要在查询的 SQL 前面添加上 explain 关键字 ...
- 搭建zabbix及报错处理
搭建ZABBIX服务器准备工作 1.需要服务器是LAMP 或 LNMP 环境 2.主机名和IP要写在HOST文件里 3.iptables 和 selinux 必须关闭 一.先用最简单的方式搭建lamp ...