如何定位 Vue 3 组件 <script setup> 内的元素?

How to target elements inside <script setup> of Vue 3 component?

如何在这个 vue 组件中使用 test class 定位元素:

<template>
  <div id="test" class="test">

  </div>
</template>


<script setup>

console.log(document.querySelector('.test'))
</script>

该组件被导入到另一个组件中。控制台输出null.

最佳做法是使用 ref 而不是 DOM 操作方法,并使用 onMounted 钩子来检查元素,如下例所示:

<script setup>
import { ref,onMounted } from 'vue'

const input =ref()
onMounted(()=>{

  input.value.focus()
})
</script>

<template>

  <input  ref="input">
</template>

你可以使用 onMounted 来定位 vue 组件内的元素:

<script setup>
import { onMounted } from 'vue'

onMounted(() => {
  console.log(document.querySelector('.test'));
})
</script>

但我建议使用 ref 而不是 DOM 操作方法:

<script setup>
import { ref, onMounted } from 'vue'

const el = ref()

onMounted(() => {
  el.value // <div>
})
</script>

<template>
  <div ref="el"></div>
</template>

文档:https://vuejs.org/api/composition-api-lifecycle.html#onmounted

在该脚本 运行

之前未呈现该组件

您想等到它安装好

<template>
  <div id="test" class="test">

  </div>
</template>


<script setup>

import { onMounted } from 'vue'; 
onMounted(() => { 
    console.log(document.querySelector('.test')) 
});
</script>

一般来说,几乎不需要在 vue 中使用像那样的 DOM 方法 - 我不会说永远不会,因为我知道一旦我这么说,就会有人想出一个有效 理由

我从来没有过