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() ...
随机推荐
- XtraBackup 搭建从库的一般步骤及 XtraBackup 8.0 的注意事项
搭建从库,本质上需要的只是一个一致性备份集及这个备份集对应的位置点信息.之前介绍的几个备份工具(MySQL中如何选择合适的备份策略和备份工具)均可满足. 这里,我们重点看看如何基于 XtraBacku ...
- Java编码安全
目录 Java编码安全 数据校验 规则1.1:校验跨信任边界传递的不可信数据 规则1.2:禁止直接使用不可信数据来拼接SQL语句 规则1.4:禁止直接使用不可信数据来记录数据 规则1.6:验证路径前将 ...
- ngx_http_fastcgi_module 的那些事
是什么? 顾名思义,是Nginx用来处理FastCGI的模块.FastCGI是什么?这个以后再讲,可以说的是现在LNMP架构里面,PHP一般是以PHP-CGI的形式在运行,它就是一种FastCGI,我 ...
- 基于camunda开源流程引擎如何实现会签及会签原理解析
一.背景 市场上比较有名的开源流程引擎有osworkflow.jbpm.activiti.flowable.camunda.由于jbpm.activiti.flowable这几个流程引擎出现的比较早, ...
- Acwing787.归并排序
Acwing787.归并排序 归并模板 归并排序,合二为一 题目链接:Acwing787.归并排序 #include<iostream> using namespace std; cons ...
- 封装环形加载进度条(Vue插件版和原生js版)
1.效果预览 2.用到的知识 主要利用SVG的stroke-dasharray和stroke-dashoffset这两个属性. 在看下面文章之前,你需要了解 <!DOCTYPE html> ...
- Spring Security认证器实现
目录 拦截请求 验证过程 返回完整的Authentication 收尾工作 结论 一些权限框架一般都包含认证器和决策器,前者处理登陆验证,后者处理访问资源的控制 Spring Security的登陆请 ...
- 【WPF】CAD工程图纸转WPF可直接使用的xaml代码技巧
前言:随着工业化的进一步发展,制造业.工业自动化等多领域,都可能用到上位监控系统.而WPF在上位监控系统方面,应该算是当下最流行的前端框架之一了.而随着监控体系的不断完善与更新迭代,监控画面会变得越来 ...
- 《AlignedReID:Surpassing Human-Level Performance in Person Re-Identification》理解
- 【cartographer_ros】七: 主要配置参数说明
上一节介绍了路标Landmark数据的订阅和发布,各类数据的发布和订阅基本阐述完毕. 本节会介绍cartographer的主要配置参数,研究这些参数的使用和对算法的影响. 目录 1,map_build ...