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

vue2的$el.querySelector在vue3中怎么写

这个也属于直接操作 dom 了,不建议在项目中这样操作,不过我是在vue2升级vue3的时候遇到的,是以前同事写的代码,也没办法

先来看一下对比

在vue2中获取实例是直接通过 this.$refs.xxx 获取绑定属性 ref=xxx 的实例,并且实例上面的$el存在 querySelector 方法,看一下 vue2 的组件代码:

<template>
  <div>
    <el-button type="text" @click="dialogVisible = true"
      >点击打开 Dialog</el-button
    >
    <el-dialog
      ref="dialogInstance"
      title="提示"
      :visible.sync="dialogVisible"
      width="30%"
      :before-close="handleClose"
      @opened="handlerOpen"
    >
      <span>这是一段信息</span>
      <span slot="footer" class="dialog-footer">
        <el-button @click="dialogVisible = false">取 消</el-button>
        <el-button type="primary" @click="dialogVisible = false"
          >确 定</el-button
        >
      </span>
    </el-dialog>
  </div>
</template>
<script>
export default {
  data() {
    return {
      dialogVisible: false,
    }
  },
  methods: {
    handlerOpen() {
      console.log(this.$refs.dialogInstance.$el.querySelector, 'lll')
    },
    handleClose(done) {
      this.$confirm('确认关闭?')
        .then((_) => {
          done()
        })
        .catch((_) => {})
    },
  },
}
</script>

此时当弹出那个出现时,是能看到这个方法的

在vue3中我们获取实例是通过 const xxxInstance = ref(xxx) 获取绑定属性 ref=xxx 的实例,但是在 xxxInstance.value.$el 上面却找不到 querySelector 方法,来看一下代码:

<template>
  <el-button plain @click="dialogVisible = true">
    Click to open the Dialog
  </el-button>

  <el-dialog
    v-model="dialogVisible"
    title="Tips"
    width="500"
    :before-close="handleClose"
    class="sdf"
    @opened="handleOpen"
    ref="dialogInstance"
  >
    <span>This is a message</span>
    <template #footer>
      <div class="dialog-footer">
        <el-button @click="dialogVisible = false">Cancel</el-button>
        <el-button type="primary" @click="dialogVisible = false">
          Confirm
        </el-button>
      </div>
    </template>
  </el-dialog>
</template>

<script lang="ts" setup>
import { ref } from 'vue'

const dialogInstance: any = ref(null)
const dialogVisible = ref(false)

const handleOpen = () => {
  console.log(dialogInstance.value.$el, '///')
  console.log(dialogInstance.value.$el.querySelector, 'qqqq')
}

const handleClose = (done: () => void) => {
  done()
}
</script>

输出

具体原因我也不知道,不过我在 $el 的 nextElementSibling 属性中找到了 querySelector 方法,并且可以使用

const handleOpen = () => {
  console.log(dialogInstance.value.$el, '///')
  console.log(
    dialogInstance.value.$el.nextElementSibling.querySelector,
    'ertert'
  )
}

总结:

在 vue3 中如果要像 vue2 一样使用 $el.querySelector 的时候,使用 $el.nextElementSibling 的 querySelector


http://www.kler.cn/a/516993.html

相关文章:

  • 笔记 — Typescript 类型定义
  • .NET Framework
  • 【二叉树】4. 判断一颗二叉树是否是平衡二叉树。5. 对称二叉树。6. 二叉树的构建及遍历 7. 二叉树的分层遍历 。
  • 设计模式的艺术-享元模式
  • 算法中的时间复杂度和空间复杂度
  • JQuery基本介绍和使用方法
  • Addressable学习
  • 【Postgres_Python】使用python脚本将多个PG数据库合并为一个PG数据库
  • Amazon Redshift实用命令语句
  • docker启动服务占用172.18网段怎么改成其他网段?和网桥有关吗?或者怎么改docker-compose启动用的yml文件
  • 理解深度学习pytorch框架中的线性层
  • AWS 签名算法SigV4 的python实现
  • Oracle Agile PLM Web Service Java示例测试开发(一)环境环境、准备说明
  • easyexcel读取写入excel easyexceldemo
  • 梯度下降法 (Gradient Descent) 算法详解及案例分析
  • 3、C#基于.net framework的应用开发实战编程 - 实现(三、二) - 编程手把手系列文章...
  • 如何高效、优雅地利用正则表达式
  • EtherCAT介绍和总线结构
  • 一文了解二叉树的遍历和线索二叉树
  • 微服务学习-SkyWalking 实时追踪服务链路
  • CTFSHOW-WEB入门-文件包含78-81
  • Spring WebFlux 和 Spring MVC 的主要区别是什么?
  • springboot使用ssl连接elasticsearch
  • 【开源免费】基于SpringBoot+Vue.JS校园失物招领系统(JAVA毕业设计)
  • FastExcel导入Excel详细步骤
  • MyBatis-Plus之常用注解