Vue3获取DOM、操作组件

news2025/2/27 21:02:25

文章目录

  • 🌟 写在前面
  • 🌟 Vue2 ref 的使用
  • 🌟 Vue3获取DOM
  • 🌟 Vue3操作组件
  • 🌟 写在最后


🌟 写在前面

专栏介绍:
凉哥作为 Vue 的忠实 粉丝输出过大量的 Vue 文章,应粉丝要求开始更新 Vue3 的相关技术文章,Vue 框架目前的地位大家应该都晓得,所谓三大框架使用人数最多,公司选型最多的框架,凉哥之前在文章中也提到过就是 Vue 框架之所以火起来的原因,和 Vue 框架相比其他框架的巨大优势,有兴趣的伙伴可以看一下 Vue框架背后的故事、尤大大对前端生态是这样看的,随着 Vue 框架不断的被认可,现如今的 Vue 框架已经是前端工程师必备的技能了,记得尤大大开发 Vue 的初衷,为了让自己的开发工作更加便捷,也希望这个框架能让更多人的开发工作变得轻松;现如今 Vue 框架做到了,尤大大做到了,当然在 20 年的 9 月 18 日,Vue 又向前端同僚们报告了一次大的突破 Vue3.0 版本正式发布!如今已经过去了两年多的时间,更多的公司选择了Vue3技术,所以凉哥也在这个时候为大家出这份专栏,本专栏将帮助大家掌握Vue3+TS技术,提升自己竞争力!点击链接订阅本专栏吧——Vue3通透教程【从零到一】

温故知新:
上篇文章中我们带领大家学习了Vue3 组合式API的生命周期钩子函数,你进行尝试了么?不知道大家是否理解我们的Vue框架的初衷哈,其实在我们的框架设计中,对于 声明式和命令式上做了很好的权衡,Vue就采用了声明式,就是为了减少对Dom的操作,但是我们仍有一些特殊的需求需要获取到我们的操作,如果我们再去使用原生的方式进行活动未免有点不搭,在Vue2中我们提供了 ref 来获取DOM和组件,那Vue3中我们又将如何使用呢?下面让我们 let’s coding!

🌟 Vue2 ref 的使用

不知道同学们是否熟悉我们Vue2中ref获取Dom的写法;很简单就是我们需要在模板中需要获取的Dom结构上加上ref属性,设置一个自定义值,然后我们可以在javaScript中通过 this.$refs['自定义的ref值']这样我们就能够获取到我们的Dom元素了;好了让我们来尝试一下吧!

由于我们前面所有文章中的实例工程都是基于Vite构建的Vue3的工程,相信大家也是跟着我来做的,我们在前面讲过Vue3工程中可以使用Vue2的选项API,所以我们可以在Vue3工程中进行尝试!

<template>
    <div>
        你好:
        <p ref="jhxl">几何心凉</p>
    </div>
</template>
<script>
export default{
    data(){
        return{

        }
    },
    mounted(){
        console.log(this.$refs['jhxl'])
        
    }
}
</script>

在这里插入图片描述

这样我们通过mounted函数中就可以通过ref拿到我们的p标签的dom结构,其实我们获取Dom的需求还是有不少的,除了我们对单独的Dom进行操作,其实我们还可以对组件进行操作,比如说我们需要对一些ui库的某个组建进行更新,比如我们的表单校验的触发;我们获取到Dom执行更新方法,比如我们通过获取一些特殊Dom的属性;


🌟 Vue3获取DOM

在Vue3通透教程【五】这篇文章中,为大家介绍了我们组合式API的响应式数据的转化,为大家介绍了两个 reactive 和 ref 那上面我们又介绍到了,其实Vue2中我们就是通过ref来获取DOM,那Vue3中的ref是用来定义响应式数据的,是否可以获取DOM呢?其实是可以的只不过我们在写法上可能有一点小小的差距,使用如下:

1)首先还是一样通过ref函数来创建一个响应式数据;
2)然后找到我们想要获取的DOM元素如Vue2一样通过ref绑定自定义值;
3)第一步的ref声明的变量要跟模板中的DOM绑定的ref值保持一致;
4)最后我们就可以在我们的 onMounted 函数中打印我们的变量了得到的就是我们的DOM。

<template>
    <p>您好,<i ref="nodeDom"> 几何心凉</i></p>
</template>
<script setup>
import { ref, onMounted } from 'vue';
let nodeDom = ref(null)
onMounted(() => {
    console.log(nodeDom.value)
})
</script>

在这里插入图片描述


🌟 Vue3操作组件

上面我们提及到了Vue2中ref除了可以获取DOM操作DOM之外呢,还可以对组件进行操作,比如我们一些UI组件的更新,UI组件树形结构的内容操作获取,还有表单组件的校验等等,ref在Vue3中可以实现操作DOM也可以获取组件实例但是需要defineExpose函数配合使用;下面通过案例来看一下吧!

1)使用 <script setup> 语法糖的组件是默认关闭的——即通过模板引用或者 $parent 链获取到的组件的公开实例,不会暴露任何在 <script setup> 中声明的绑定。(也就是说我们在父组件通过ref直接获取到子组件,但是我们拿不到 setup 中的变量及方法)

创建一个子组件:son.vue 并且实现一个点赞的小功能。

<template>
    <div>
        <p>几何心凉</p>{{ num }} 个赞,<button @click="zan"></button>
    </div>
</template>

<script setup>
import { ref } from 'vue';
let num = ref(0)
const zan = () => {
    num.value++
}
</script>

然后我们在app.vue组件中引用这个组件。

<template>
    <p>您好,</p>
    <son></son>
</template>
<script setup>
import son from "./son.vue";
</script> 

在这里插入图片描述

组件的展示和事件都没有问题,下面我们来尝试一下获取到组件实例并且我们拿到里面的数据以及调用里面的方法是否可行?(获取组件的方法跟我们上面介绍的获取Dom的方法是一样的)

<template>
    <p>您好,</p>
    <son ref="sonDom"></son>
</template>
<script setup>
import { onMounted ,ref} from "vue";
import son from "./son.vue";
const sonDom=ref(null)

onMounted(()=>{
    console.log(sonDom.value)
    console.log(sonDom.value.num)
    sonDom.value.zan()
})
</script> 

在这里插入图片描述

果然报错了,我们可以获取到组件实例,但是缺拿不到组件里面setup中的数据和方法,这就是我们组合API中的如果想要获取可以通过 defineExpose 编译器宏来显式指定在 <script setup> 组件中要暴露出去的属性; (说白了就是我们在 son.vue 中如果用的是setip语法糖 如果需要在父组件用到数据或者方法我们就用defineExpose暴露出去!)我们来实现一下代码。

<template>
    <div>
        <p>几何心凉</p>{{ num }} 个赞,<button @click="zan"></button>
    </div>
</template>

<script setup>
import { ref } from 'vue';
let num = ref(0)
const zan = () => {
    console.log('我被执行了!')
    num.value++
}
defineExpose({
    num,zan
})
</script>

按照我们在上面 app.vue 中的打印了 num 并且执行了 zan 函数,num应该会++并且打印我被执行了!

在这里插入图片描述

好了这样我们就实现了我们的需求,综合上面的案例我们来实现一下小小的功能吧,那就是我们要在父组件添加一个踩的功能,子组件的赞是添加赞数,父组件的踩是减少赞数,我们来实现一下吧!其实我们的son.vue组件的代码就是上面这样无需更换了,我们来改造一下 app.vue 组件中的代码就好了!

<template>
    <p>您好,</p>
    <son ref="sonDom"></son><button @click="cai"></button>
</template>
<script setup>
import { onMounted, ref } from "vue";
import son from "./son.vue";
const sonDom = ref(null)
const cai = () => {
    sonDom.value.num--
}
</script> 

在这里插入图片描述


🌟 写在最后

总结一下本篇文章我们学习了Vue3如何获取操作DOM,其实还是通过我们的ref,只不过我们首先通过ref来声明响应式数据,然后在我们的Dom层通过ref来绑定刚刚声明的响应式变量,然后我们在需要的地方通过变量即可获取到DOM,组件的获取也是如此,只不过在组件中我们可以通过ref拿到组件的实例,但是并不能直接拿到setup中的数据或者函数,这需要我们通过defineExpose在子组件进行暴露,我们方可在父组件进行获取!大家要多多尝试哦;各位小伙伴让我们 let’s coding!

本期推荐!

在这里插入图片描述

原创不易,还希望各位大佬支持一下 \textcolor{blue}{原创不易,还希望各位大佬支持一下} 原创不易,还希望各位大佬支持一下

👍 点赞,你的认可是我创作的动力! \textcolor{green}{点赞,你的认可是我创作的动力!} 点赞,你的认可是我创作的动力!

⭐️ 收藏,你的青睐是我努力的方向! \textcolor{green}{收藏,你的青睐是我努力的方向!} 收藏,你的青睐是我努力的方向!

✏️ 评论,你的意见是我进步的财富! \textcolor{green}{评论,你的意见是我进步的财富!} 评论,你的意见是我进步的财富!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/405145.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

若依框架前端Vue项目分析实战

说明 前面讲解了vue2的单点知识&#xff0c;下面用若依提供的vue项目&#xff0c;实战分析一下&#xff0c;拿到一个vue项目&#xff0c;如何进行分析并进行二次开发。 一、public/index.html与main.js和App.vue三者的关系 vue项目是单界面应用&#xff0c;所有的界面将在pu…

VSCode 入门操作大全 + 实用插件推荐【零基础专属详细教程】

&#x1f4c0; 前言&#xff1a; &#x1f3ab; 选择一个好的开发工具很重要&#xff0c;很多刚学编程的小伙伴在 webstorm 和 vscode 上很难抉择&#xff0c;我个人更喜欢使用 vscode&#xff0c;因为其有着简洁的操作风格和丰富的人性化的各种功能&#xff0c;这篇文章带给大…

2022年前端Vue常见面试题大全(三万长文)持续更新...

目录 1.Vue和React有什么不同&#xff1f;使用场景分别是什么&#xff1f; 2.axios是什么&#xff1f;怎么使用它&#xff0c;怎么解决跨域&#xff1f; 3.说说Vue&#xff0c;React&#xff0c;angularjs&#xff0c;jquery的区别 4.什么阶段&#xff08;生命周期&#xff…

2022最新版40个前端练手项目【附视频+源码】

不管学习哪门语言都希望能做出实际的东西来&#xff0c;这个实际的东西当然就是项目啦&#xff0c; 不用多 说&#xff0c;大家都知道学编程语言一定要做项目才行。 本次给到大家的是40个前端实战练手项目(附源码和视频讲解)&#xff0c;希望对大家有一定的帮助&#xff0c;激…

企微获取用户敏感数据

1、企微配置可信域名 2、企微获取成员userID 3、企微获取用户敏感数据 文章目录一、简介1、企微数据安全更新2、身份验证方式2.1 网页授权登录(企微内部)2.2 扫描授权登录(浏览器)二、企微应用配置1、企微配置可信域名2、企微授权登录3、企微可信IP三、网页授权登录方式(企微)1…

Vue2 大型项目升级 Vue3 详细经验总结

前言 前段时间&#xff0c;公司准备在现有的 Vue2 项目中做一个聊天系统&#xff0c;但考虑开发聊天系统的周期并不短&#xff0c;客户又急需。于是准备对接腾讯的 IM 组件&#xff0c;来实现。 不知道的这里贴个官网&#xff1a; IM TUIKit 官方文档 对于 TUIKit&#xff0…

【axios】axios的基本使用

axios是一个专注于网络请求的库。 不同于jquery&#xff0c;功能复杂&#xff0c;既可以操作dom&#xff0c;又可以做动画&#xff0c;还可以发ajax请求。axios是一个专注于网络请求的库。 一、基本使用 1.导入库文件 在js中导入axios的库文件后&#xff0c;会直接在全局挂载…

[vue 进阶] 关于dicts字典的用法

最近在学习若依系统的框架&#xff0c;其中发现一个很奇怪的事情&#xff0c;网上查询很多地方&#xff0c;也是一知半解。 网上搜索的结果如下&#xff0c;大家可以先看看&#xff1a; [vue 进阶] 关于dicts字典的用法_小钿钿不忘初心_的博客-CSDN博客前言在使用若依框架开发…

CSS3如何调整背景图片大小

系列文章目录 CSS3实现半透明边框&#xff08;1&#xff09; CSS3实现多重边框&#xff08;2&#xff09; CSS3如何改变背景图片大小系列文章目录一、background-size语法格式二、参数详解1.length2.percentage3.cover4.contain总结在CSS3中&#xff0c;如果想要调整背景图片的…

适合普通大学生的前端开发学习路线

大家好&#xff0c;我是帅地。 假如你没有明确的目标&#xff0c;或许可以按照我说的学习路线来学习一波&#xff0c;我写的每一份学习路线&#xff0c;不会很全面&#xff0c;因为我认为&#xff0c;东西列的太多&#xff0c;反而不利于新手的学习&#xff0c;所以我列举的&a…

Vue中的路由

目录 目录 一&#xff0c;路由理解 二&#xff0c;基本配置 第一步: 在main.js文件中引入并使用插件 第二步: 在src文件夹下创建一个router文件夹然后在文件夹下创建index.js ​编辑 第三步: 回到main.js中引入创建的 router 并在vue实例对象中使用 三&#xff0c;路由的…

vue使用富文本编辑器vue-quill-editor

问题描述&#xff1a; 我们在开发过程中经常会遇到使用富文本编辑器进行操作&#xff0c;当前插件市场上关于富文本的编辑器挺多的&#xff0c;我们就不一一个介绍了&#xff0c;现在我们主要讲解一些vue-quill-editor富文本编辑器的使用操作和注意事项。 效果图 具体操作使用…

是什么让学习 Web 开发在未来几年变得有价值?

&#x1f482; 个人网站:【海拥】【摸鱼游戏】【神级源码资源网】&#x1f91f; 前端学习课程&#xff1a;&#x1f449;【28个案例趣学前端】【400个JS面试题】&#x1f485; 想寻找共同学习交流、摸鱼划水的小伙伴&#xff0c;请点击【摸鱼学习交流群】&#x1f30a; 本文首发…

React中ref的使用方法和使用场景(详解)

摘要 不管在Vue中还是React&#xff0c;如果我们想使用一个元素的DOM&#xff0c;不需要通过JS中操纵DOM的方法&#xff0c;它们提供了一个专属的API就是ref。 而Vue中的ref可能比较简单&#xff0c;这一篇主要讲一下如何在React中使用ref&#xff0c;以及使用ref的场景。 1…

如何创建vue3项目

目录 如何创建vue3项目 1、用vue cli创建 2、使用vite直接创建 3、使用vue3官方推荐创建方式 如何创建vue3项目 创建vue3我们常用的有三种方式&#xff1a; 1、用vue cli创建 1.使用vue cli环境前提条件&#xff1a; node -vv16.13.0 npm -v8.1.0 vue -Vvue/cli 4.5.15 …

微信小程序中使用vant组件库(超详细)

目录前言Vant Weapp的安装与使用1、安装 node.js2、通过 npm 安装3、修改 app.json4、修改 project.config.json5、构建 npm 包6、使用组件全局引入和局部引入全局引入局部引入Toast 组件的使用官方文档 API 详解Props 参数Events 事件Slot 插槽外部样式类前言 Vant是一个轻量…

vue中this.$router.push()路由传值和获取的两种常见方法

今天接到了比较大的需求&#xff0c;由于这个公司的接口调用方法和上一段实习那家公司的写法很不一样&#xff0c;我花了很多时间在摸索&#xff0c;“踏出第一步总是最困难的”&#xff0c;果然没错&#xff0c;第一个很费劲&#xff0c;但完成之后有了思路&#xff0c;下面的…

登录功能的实现(包括前后端)

目录:&#x1f349;&#x1f349;&#x1f349;UPDATE:✨✨✨前言✨✨✨概述✨✨✨技术栈✨✨✨效果图✨✨✨代码✨✨✨github链接&#x1f349;&#x1f349;&#x1f349;UPDATE: 突然发现喜提榜一&#xff0c;蟹蟹读者老爷们的支持(づ&#xffe3; 3&#xffe3;)づ 润色了…

微信小程序完整项目实战(前端+后端)

基于微信小程序的在线商城点单系统 前言&#xff1a;闲来无事&#xff0c;想以后自己开一个小超市或者小吃店&#xff0c;能够支持线上下单&#xff0c;既方便客户也方便自己。系统采用C#语言作为后端实现与小程序的交互&#xff0c;给用来学习或者想自己开个小店的朋友当个参考…

如何在 WordPress 中嵌入 iFrame

&#x1f482; 个人网站:【海拥】【摸鱼游戏】【神级源码资源网站】&#x1f91f; 前端学习课程&#xff1a;&#x1f449;【28个案例趣学前端】【400个JS面试题】&#x1f485; 想寻找共同学习交流、摸鱼划水的小伙伴&#xff0c;请点击【摸鱼学习交流群】&#x1f4ac; 免费且…