<template>
<a
href="javascript:void(0)"
:data-router-target-page-id="to?.name"
:class="{
[activeClass]: active,
[exactActiveClass]: exactActive
}"
>
<slot :href="to" :isActive="active" :isExactActive="exactActive"></slot>
</a>
</template>
<script lang="ts">
import { computed, inject, PropType, Ref } from 'vue'
export default {
props: {
activeClass: {
type: String,
default: ''
},
exactActiveClass: {
type: String,
default: ''
},
to: {
type: Object as PropType<{
name: string
}>
}
},
setup(props) {
const pageAncestor = (inject('page-ancestors') as Ref<string[] | null>).value
const active = computed(() => {
if (!Array.isArray(pageAncestor) || !props.to?.name) {
return false
}
return pageAncestor.includes(props.to.name)
})
const exactActive = computed(() => {
if (!Array.isArray(pageAncestor) || !props.to?.name) {
return false
}
return props.to.name === pageAncestor[pageAncestor.length - 1]
})
return {
active,
exactActive
}
}
}
</script>