<template>
<edo-nav />
<main>
<component v-for="component in components" :key="component" :is="component" :ref="myRefs" />
</main>
</template>
<script setup>
/**
* @author 全易
* @time 2023-08-08 11:22:39 星期二
* @description
**/
import edoNav from "./modules/nav"
import edoHome from "./modules/home"
import edoAbout from "./modules/about"
import edoProducts from "./modules/products"
import edoExamples from "./modules/example"
import edoPrograms from "./modules/programs"
import edoContact from "./modules/contact"
import { ref, onMounted } from 'vue'
const components = [edoHome, edoAbout, edoProducts, edoExamples, edoPrograms, edoContact]
const myRefs = ref([]);
onMounted(() => {
console.log(myRefs.value);
})
</script>
<style lang="less" scoped></style>
打印出来就是:
并没有dom元素
这样试试
<template>
<edo-nav />
<main>
<component v-for="(component, index) in components" :key="component" :is="component" :ref="el => myRefs[index] = el" />
</main>
这样试试
</template>
<script setup>
import edoNav from "./modules/nav"
import edoHome from "./modules/home"
import edoAbout from "./modules/about"
import edoProducts from "./modules/products"
import edoExamples from "./modules/example"
import edoPrograms from "./modules/programs"
import edoContact from "./modules/contact"
import { ref, onMounted } from 'vue'
const components = [edoHome, edoAbout, edoProducts, edoExamples, edoPrograms, edoContact]
const myRefs = ref([]);
onMounted(() => {
console.log(myRefs.value);
})
</script>
【以下回答由 GPT 生成】
在Vue3中,如果要在循环组件中获取DOM元素,可以使用ref
和$refs
来实现。在你的代码中,需要进行以下修改来正确获取组件的DOM元素:
:ref
绑定到一个数组上,而不是myRefs
。将:ref="myRefs"
改为:ref="myRefs"
。<component v-for="component in components" :key="component" :is="component" :ref="myRefs" />
<script setup>
中,使用ref
创建一个名为myRefs
的ref,并将其初始化为空数组。const myRefs = ref([]);
myRefs
数组中。可以通过在onMounted
钩子中使用$refs
属性来访问到每个组件的DOM元素。在循环中,将每个组件的DOM元素通过push
方法添加到myRefs
数组中。onMounted(() => {
for(let i=0; i < components.length; i++) {
myRefs.value.push($refs[`component${i}`]);
}
console.log(myRefs.value);
});
完整的修改代码如下:
<template>
<edo-nav></edo-nav>
<main>
<component v-for="(component, index) in components" :key="component" :is="component" :ref="`component${index}`" />
</main>
</template>
<script setup>
import edoNav from './modules/nav'
import edoHome from './modules/home'
import edoAbout from './modules/about'
import edoProducts from './modules/products'
import edoExamples from './modules/example'
import edoPrograms from './modules/programs'
import edoContact from './modules/contact'
import { ref, onMounted } from 'vue'
const components = [edoHome, edoAbout, edoProducts, edoExamples, edoPrograms, edoContact]
const myRefs = ref([]);
onMounted(() => {
for(let i=0; i < components.length; i++) {
myRefs.value.push($refs[`component${i}`]);
}
console.log(myRefs.value);
})
</script>
<style lang="less" scoped></style>
这样修改后,你应该能正确获取到循环组件中每个组件的DOM元素。
【相关推荐】