type: [String, Object] as PropType<RouteLocationRaw>,
required: true,
},
- activeClass: {
- type: String,
- default: 'router-link-active',
- },
- exactActiveClass: {
- type: String,
- default: 'router-link-exact-active',
- },
+ activeClass: String,
+ // inactiveClass: String,
+ exactActiveClass: String,
custom: Boolean,
},
setup(props, { slots, attrs }) {
const link = reactive(useLink(props))
+ const { options } = inject(routerKey)!
const elClass = computed(() => ({
- [props.activeClass]: link.isActive,
- [props.exactActiveClass]: link.isExactActive,
+ [getLinkClass(
+ props.activeClass,
+ options.linkActiveClass,
+ 'router-link-active'
+ )]: link.isActive,
+ // [getLinkClass(
+ // props.inactiveClass,
+ // options.linkInactiveClass,
+ // 'router-link-inactive'
+ // )]: !link.isExactActive,
+ [getLinkClass(
+ props.exactActiveClass,
+ options.linkExactActiveClass,
+ 'router-link-exact-active'
+ )]: link.isExactActive,
}))
return () => {
function getOriginalPath(record: RouteRecord | undefined): string {
return record ? (record.aliasOf ? record.aliasOf.path : record.path) : ''
}
+
+/**
+ * Utility class to get the active class based on defaults.
+ * @param propClass
+ * @param globalClass
+ * @param defaultClass
+ */
+let getLinkClass = (
+ propClass: string | undefined,
+ globalClass: string | undefined,
+ defaultClass: string
+): string =>
+ propClass != null
+ ? propClass
+ : globalClass != null
+ ? globalClass
+ : defaultClass
* {@link RouterOptions.parseQuery | `parseQuery`} counterpart to handle query parsing.
*/
stringifyQuery?: typeof originalStringifyQuery
+ /**
+ * Default class applied to active {@link RouterLink}. If none is provided,
+ * `router-link-active` will be applied.
+ */
+ linkActiveClass?: string
+ /**
+ * Default class applied to exact active {@link RouterLink}. If none is provided,
+ * `router-link-exact-active` will be applied.
+ */
+ linkExactActiveClass?: string
+ /**
+ * Default class applied to non active {@link RouterLink}. If none is provided,
+ * `router-link-inactive` will be applied.
+ */
+ // linkInactiveClass?: string
}
export interface Router {
readonly history: RouterHistory
readonly currentRoute: Ref<RouteLocationNormalizedLoaded>
+ readonly options: RouterOptions
addRoute(parentName: RouteRecordName, route: RouteRecordRaw): () => void
addRoute(route: RouteRecordRaw): () => void
hasRoute,
getRoutes,
resolve,
+ options,
push,
replace,
const router = createRouter({
history: createWebHistory(),
- strict: true,
routes: [{ path: '/', component }],
parseQuery: search => ({}),
stringifyQuery: query => '',
+ strict: true,
end: true,
sensitive: true,
scrollBehavior(to, from, savedPosition) {},