当组件进行交互时,比如切换轮播图,切换按钮组等控制台发生以下报错:
这个原因是【aria-hidden】属性问题,报错信息中有告诉了我们是哪个标签中存在这个属性(该图片已知有个类名【n-carousel__slide】),那我们就想办法找到这个标签(这个标签会有多个),然后去除该属性。
解决方法一:若在 Vue 项目中使用组件,可以使用 ref 属性查找,这里以 Vue3 和 Navie-UI 为例:
<!-- 这里使用 Navie-UI 轮播图组件为例 -->
<template>
<n-carousel
effect="card"
prev-slide-style="transform: translateX(-150%) translateZ(-800px);"
next-slide-style="transform: translateX(50%) translateZ(-800px);"
style="height: 240px"
:show-dots="false"
@update:current-index="changeCarousel"
>
<n-carousel-item :style="{ width: '60%' }" v-for="(item,index) in 3" :key="index" ref="carouselRef">
<img
class="carousel-img"
src="https://naive-ui.oss-cn-beijing.aliyuncs.com/carousel-img/carousel1.jpeg"
>
</n-carousel-item>
</n-carousel>
</template>
<script lang="ts" setup>
import { onMounted, ref } from 'vue';
const carouselRef = ref(null)
// 组件刚加载时就进行去除
onMounted(() => {
// 防止轮播图交互时控制台报错
carouselRef.value.forEach((item:any) => {
// 先打印 item 是否为控制台报错的标签
console.log(item); // 打印发现 item 对象有个 selfElRef 字段才是我们需要的标签
// 再打印 item.selfElRef 是否存在【aria-hidden】属性,若存在移除该属性
console.log(item.selfElRef);
item.selfElRef.removeAttribute('aria-hidden')
})
})
// 轮播图交互时发现每次切换该组件都会自动加入【aria-hidden】属性,所以每次切换都需要调用
function changeCarousel(){
// 防止轮播图交互时控制台报错
carouselRef.value.forEach((item:any) => {
item.selfElRef.removeAttribute('aria-hidden')
})
}
</script>
控制台打印 item 信息如下:
控制台打印 item.selfElRef 信息如下:
这里就不再演示其他情况了,若使用 Vue2 和 Element-UI ,大概讲一下步骤:
1、给 Elementu-UI 组件报错的标签定义一个 ref=“xxRef”;
2、找到【控制台报错的标签信息】(可以通过打印 console.log(this.$refs.xxRef) 找里面的属性是否【存在控制台报错的标签】)
3、循环【报错标签数组】并打印每个对象,看是否与控制台报错标签一致,若一致去除【aria-hidden】属性;
4、在 【mounted() 方法】和【组件自带的切换事件】都需要进行循环去除【aria-hidden】属性。
解决方法二:使用 document.getElementsByClassName(‘n-carousel__slide’) 找到该标签
// 也可以使用 querySelectorAll('.n-carousel__slide')找到该标签
// const slides = document.querySelectorAll('.n-carousel__slide')
const slides = document.getElementsByClassName('n-carousel__slide')
for (const slide of slides) {
// 先打印每个标签看是否存在【aria-hidden】属性,若存在移除该属性
console.log(slide);
// 执行下行后控制台标签不再有【aria-hidden】
slide.removeAttribute('aria-hidden')
}
同样,以上代码也要放在【组件刚加载时】和【组件调用更新(切换)事件】的时候。