当前位置: 首页 > article >正文

Vue3操作DOM元素

        在原生的网页中通过document.getById()可以直接获取到dom元素,在Vue中主要是通过标签的ref属性给标签起名字。

操作DOM

在Vue3中操作DOM的方式如下:

  1. 通过ref属性给标签起名字

  2. 定义一个与标签名一样的变量,通过ref()获取虚拟DOM节点

  3. 元素挂载之后访问

<template>
    <div ref="hello">hello,Vue3!</div>
</template>
​
<script setup>
    import { ref } from 'vue';
    //  变量名必须与标签的ref属性值相同
    const hello = ref()
</script>

此时元素还没挂载,不能直接使用DOM。只有元素挂载后才能使用(如在onMounted()声明周期中),并且要通过.value属性拿到DOM的信息

引发深思

为什么这里引用DOM元素的变量名要与标签的ref属性值相同?这两者是怎么关联起来的?

将script标签中的setup去掉,代码等效于下面这种形式:

<template>
    <div ref="hello">hello,Vue3!</div>
</template>
​
<script>
    import { ref } from 'vue';
    export default {
        setup() {
            //  定义引用对象
            const hello = ref()
            //  返回引用对象
            return {
                hello
            }
        }
    }
</script>

这样看来,hello引用的对象与DOM的关联流程大致如下:

  1. setup定义ref对象(此时引用对象的value属性为空,用于存放真实DOM) ==> ( const hello = ref( ) )

  2. 在setup函数中返回引用对象 ==>( return { hello } )

  3. Vue框架拿到引用对象,将引用对象的value属性存放真实DOM ==> ( hello.value = DOM对象 )

于是我变量名字进行了更改,但是返回的还是hello属性,代码如下:

<template>
    <div ref="hello">hello,Vue3!</div>
</template>
​
<script>
    import { ref } from 'vue';
    export default {
        setup() {
            //  定义引用对象
            const vue3 = ref()
            //  返回引用对象
            return {
                hello: vue3
            }
        }
    }
</script>

用这种方式仍然能获取到DOM,得出最终结论:

标签ref名字与变量名是通过setup函数返回对象的属性名进行关联的,即:

① 通过返回对象的属性找到真实DOM

② 通过返回对象的属性找到引用对象

③ 将真实DOM存入引用对象(定义引用对象的.value属性= 真实DOM)


http://www.kler.cn/news/318243.html

相关文章:

  • C++信奥老师解一本通题 1164:digit函数
  • 【每日一题】LeetCode 2207.字符串中最多数目的子序列(贪心、字符串、前缀和)
  • 基于深度学习的能源消耗预测
  • linux-vim的使用
  • 【WebLogic】WebLogic 11g 控制台模式下安装记录
  • mysql中的json查询
  • 美业门店怎么提升业绩?连锁美业门店管理系统收银系统拓客系统源码
  • docker部署clickhouse
  • 计算机毕业设计之:基于微信小程序的疫苗预约系统的设计与实现(源码+文档+讲解)
  • 基于MTL的多任务视频推荐系统
  • Linux学习 重定向 管道 流
  • 前端组件库Element UI 的使用
  • 深入解析:Kubernetes 如何使用 etcd 作为配置中心和注册中心
  • 鸿蒙OpenHarmony【小型系统基础内核(进程管理调度器)】子系统开发
  • 【爬虫】PlayWright使用说明
  • 如何查看docker 镜像的sha256值
  • Python编码系列—Python模板方法模式:定义算法骨架,让子类实现细节
  • Element Plus图片上传组件二次扩展
  • 《探索云原生与相关技术》
  • 【nvm管理多版本node】下载安装以及常见问题和解决方案
  • 分发饼干00
  • 苹果手机邮箱添加阿里云邮箱的设置步骤
  • Tomcat 乱码问题彻底解决
  • BigDecimal的使用
  • Vue.js props 子组件可以从父组件接收数据(通过 props)并可以向父组件发送事件(通过 $emit)
  • 力扣206.反转链表
  • 24/9/24 算法笔记 超参数优化算法
  • 模型验证 — 交叉验证Cross Validation的方法
  • 大数据新视界 --大数据大厂之算法在大数据中的核心作用:提升效率与智能决策
  • 【linux】file命令