如何在元素中定位 router-link-active 类?
我有一个带有 2 个路由器链路的组件。我希望在单击其中一个时两者
都着色。问题是这些路由器链接不共享 router-link-active
类,因此我尝试通过 querySelector
定位它们并应用 color< /code> 手动 css 属性。
这是组件:
<template>
<div id="nav-link-cms" class="nav-link-cms">
<li>
<router-link class="router-link" :to="{ name: link}">
<span>
<fa class="icon" :icon="icon"></fa>
<span class="label">{{ label }}</span>
<router-link class="plus-link" v-if="plusLink" :to="{ name: plusLink }">
<fa class="icon-plus" :icon="[ 'fas', 'circle-plus' ]"></fa>
</router-link>
</span>
</router-link>
</li>
</div>
</template>
我可以像这样定位一个 router-link 类 plus-link
:
<script setup>
import { onMounted } from 'vue';
onMounted(() => {
console.log(document.querySelector('.plus-link'))
})
</script>
这似乎工作正常。浏览器控制台输出:
如您所见,link 元素中同时存在 router-link-active
和 plus-link
类。
像这样输出 classList
:
onMounted(() => {
console.log(document.querySelector('.plus-link').classList)
})
在控制台中显示:
DOMTokenList ['plus-link', value: 'plus-link']
0: "router-link-active"
1: "router-link-exact-active"
2: "plus-link"
length: 3
value: "router-link-active router-link-exact-active plus-link"
[[Prototype]]: DOMTokenList
但是当我尝试查看列表是否包含
a router-link-active 类:
onMounted(() => {
console.log(document.querySelector('.plus-link').classList.contains('router-link-active'))
})
控制台显示:
false
即使在 onMounted
之后,是否仍应用 router-link-active
?我怎样才能瞄准它?
I have a component with 2 router links. I want both
to be colored when either one is clicked. Problem is that these router links don't share a router-link-active
class, so I'm trying to target them via querySelector
and apply the color
css property manually.
This is the component:
<template>
<div id="nav-link-cms" class="nav-link-cms">
<li>
<router-link class="router-link" :to="{ name: link}">
<span>
<fa class="icon" :icon="icon"></fa>
<span class="label">{{ label }}</span>
<router-link class="plus-link" v-if="plusLink" :to="{ name: plusLink }">
<fa class="icon-plus" :icon="[ 'fas', 'circle-plus' ]"></fa>
</router-link>
</span>
</router-link>
</li>
</div>
</template>
and I can target one router-link class plus-link
like so:
<script setup>
import { onMounted } from 'vue';
onMounted(() => {
console.log(document.querySelector('.plus-link'))
})
</script>
This seems to work fine. The browser console outputs:
As you can see both router-link-active
and plus-link
classes are present in the link element.
Outputting the classList
like so:
onMounted(() => {
console.log(document.querySelector('.plus-link').classList)
})
shows this in the console:
DOMTokenList ['plus-link', value: 'plus-link']
0: "router-link-active"
1: "router-link-exact-active"
2: "plus-link"
length: 3
value: "router-link-active router-link-exact-active plus-link"
[[Prototype]]: DOMTokenList
But as soon as I try to see if the list contains
a the router-link-active
class:
onMounted(() => {
console.log(document.querySelector('.plus-link').classList.contains('router-link-active'))
})
the console shows:
false
Is router-link-active
applied even after onMounted
? How can I target it?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我自己没有尝试过,但你应该能够使用
useLink
Docs,从Vue-Router中获取每个路由的if值(link
和plusLink
),然后查看其isActive
属性然后他们俩都将其传递给 模板。伪代码:
注意:一般来说,在使用任何 FE 框架时,您应该避免直接 DOM 操作。
Have not tried it myself but you should be able to use
useLink
Docs, from Vue-Router to get if the value for each route (link
andplusLink
), and then look at theisActive
property of both of them then pass it to the template.Psudo-code:
Note: As a general thing you should avoid direct DOM manipulation when using any FE framework.