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

vue2中的this.$el,this.$parent,this.$children 在vue3中如何表示

今天在从vue2升级vue3的时候,遇到了这个问题,下面说一下这些怎么表示

vue2中的this.$el其实就是获取当前的组件节点,让我们来看一下代码和输出

在vue2中我们有组件:

<template>
  <div class="aaa">
    <div class="block">
      <span class="demonstration">完整功能</span>
    </div>
  </div>
</template>

<script>
export default {
  name: '',
  data() {
    return {}
  },
  mounted() {
    console.log(this.$el, 'this.$el')
  },
}
</script>

<style lang="" scoped></style>

看一下输出是什么

通过 class="aaa" 可以看见输出就是当前模板标签内的根标签

所以在 vue3 中我们可以通过在 ref 的方式获取到根标签,代码如下

<script setup lang="ts">
import { ref } from 'vue'
const ownInstance = ref(null)

console.log(ownInstance, 'ownInstance')
</script>
<template>
  <div ref="ownInstance" class="aaa">
    <div class="block">
      <span class="demonstration">完整功能</span>
    </div>
  </div>
</template>

<style lang="less" scoped></style>

之后我们在看一下 vue2 里面的 this.$parent 输出的是什么

输出的是它的父组件,我们在vue3中获取父组件是这样的

import { getCurrentInstance } from 'vue'

const instance = getCurrentInstance()

console.log(instance.parent)

让我们来看一下输出是什么样子的

这里要注意的是,当需要使用父组件里面的一些方法或者数据时,需要在 exposed 里面使用

然后在说一下 this.$children,在vue2中,this.$children 就是获取子组件的实例,vue3 我们可以通过 ref 获取

<template>
  <ChildComponent ref="childRef" />
</template>

<script lang="ts">
import { ref, onMounted } from 'vue'
import ChildComponent from './ChildComponent.vue'
const childRef = ref(null)

onMounted(() => {
  // 访问子组件实例
  console.log(childRef.value)
})
</script>

但是有个地方我们注意一下:

当在 vue2 根据 this.$children 获取到的子组件是一个数组,而在 vue3 中通过 ref 获取到的子组件,如果只有一个 ref=xxx,获取到的 xxx 就是一个子组件实例,当有多个 ref=xxx 的时候,获取到的才是数组,下面来看一下详细的

vue2只有一个子组件时:

<template>
  <div class="aaa">
    <div class="block">
      <span class="demonstration">完整功能</span>
      <testxxx></testxxx>
      <!-- <testxxx v-for="i in 3" :key="i"></testxxx> -->
    </div>
  </div>
</template>

<script>
import testxxx from './testxxx.vue'
export default {
  name: '',
  components: { testxxx },
  data() {
    return {}
  },
  mounted() {
    console.log(this.$children, 'this.$children')
  },
}
</script>

<style lang="" scoped></style>

vue2有多个子组件时:

vue3只有一个子组件时:

<script setup lang="ts">
import { ref, onMounted } from 'vue'
import trimxxx from './trimxxx.vue'
const childRef = ref(null)

onMounted(() => {
  // 访问子组件实例
  console.log(childRef.value)
})
</script>

<template>
  <!-- <trimxxx ref="childRef" /> -->
  <trimxxx ref="childRef" v-for="i in 3" :key="i" />
</template>

<style scoped></style>

vue3有多个子组件时:


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

相关文章:

  • django authentication 登录注册
  • springboot获取配置文件中的值
  • 游戏引擎学习第23天
  • 永磁同步电机末端振动抑制(输入整形)
  • 鸿蒙征文|鸿蒙心路旅程:从零到一的探索与成长——我的HarmonyOS
  • 如何利用ATECLOUD平台来实现数据报告的导出和数据分析?-纳米软件
  • 《基于FPGA的便携式PWM方波信号发生器》论文分析(三)——数码管稳定显示与系统调试
  • Redis 实现高性能计数器
  • STM32F103外部中断配置
  • Web3.0安全开发实践:Clarity最佳实践总结
  • Oracle 数据库 IDENTITY 列
  • [网络]无线通信中的AMPDU
  • java基础面试题七数据结构与集合源码
  • go语言闭包捕获的是变量的引用而不是变量的值
  • 【GoF23种设计模式】01_建造者模式
  • 40_U²-Net网络详解
  • 【shodan】(五)网段利用
  • 跨标签通信的几种方式
  • Sickos1.1 详细靶机思路 实操笔记
  • 【人工智能】Python与Scikit-learn的模型选择与调参:用GridSearchCV和RandomizedSearchCV提升模型性能
  • 音视频处理PCM相关概念:帧(Frame)、周期(Period Size)、量化、 声道数(Channels)、采样位数(Sample Bits)、采样频率
  • 鸿蒙操作系统(HarmonyOS)开发的初学者了解和入门
  • goframe开发一个企业网站 在vue-next-admin 显示验证码 19
  • Android 底部导航栏未选中菜单项显示文本title
  • 移动端,树形数据的一种展示形式
  • 嵌入式硬件设计:从概念到实现的全流程