vue.js - 仅在特定布局和页面中添加 linkExactActiveClass
问题描述
我对 Vue 比较陌生。我的应用程序有多个布局,但只有一个路由器。
我按照本教程了解上下文。我只想在特定布局和页面上添加活动类。例如,我只希望管理布局导航上的活动类,而不是登录页面布局导航上的活动类。我如何实现这一目标?
main.js
import { createApp } from "vue";
import App from "./App.vue";
import { routes } from "./routes.js";
import { createRouter, createWebHistory } from "vue-router";
const app = createApp(App);
const router = createRouter({
history: createWebHistory(),
routes,
linkExactActiveClass: "active",
});
app.use(router);
app.mount("#app");
路由.js
import Home from "./views/Home.vue";
import Dashboard from "./views/app/Dashboard.vue";
export const routes = [
{
path: "/",
component: Home,
meta: { layout: "LandingLayout", title: "Home" },
},
{
path: "/user",
component: Dashboard,
meta: { layout: "AppLayout", title: "Dashboard" },
},
];
应用程序.vue
<template>
<component :is="layout" />
</template>
<script>
import LandingLayout from "@/layouts/LandingLayout.vue";
import AdminLayout from "@/layouts/AdminLayout.vue";
export default {
components: {
LandingLayout,
AdminLayout,
},
data() {
return {
layout: null,
};
},
watch: {
$route(to) {
if (to.meta.layout !== undefined) {
this.layout = to.meta.layout;
} else {
this.layout = "LandingLayout";
}
},
},
};
</script>
任何帮助将非常感激。
解决方案
你非常接近。您唯一忘记的是通过像这样提供它来使路线监视立即发生:
watch: {
$route: {
immediate: true,
handler(to) {
if (to.meta?.layout) {
this.layout = to.meta.layout;
} else {
this.layout = "LandingLayout";
}
},
},
},
然后您可以this.$router.options.linkExactActiveClass
像这样动态更改选项:
$route: {
immediate: true,
handler(to) {
if (to.meta?.layout) {
this.layout = to.meta.layout;
this.$router.options.linkExactActiveClass = `my-active-link-other-layout`;
} else {
this.layout = "LandingLayout";
this.$router.options.linkExactActiveClass =
"my-active-link-landing-layout";
}
},
},
看看它的实际效果:
代码沙盒链接
推荐阅读
- python - 如何使用 Python 从 Pandas 数据框中删除列?
- css - CSS显示单选类型输入
- git - 在 Visual Studio Code 的 git 集成中变基而不是合并
- mysql - SQL INSERT INTO xxx 不存在
- java - 从适配器传递字符串数组列表并获得空结果
- c# - 调整当前页面大小以适应应用程序高度
- javascript - 如何在两个字符串中获取公共子字符串以保持顺序?
- c# - FTP 下载文件
- web-services - ReviseItem 上的 eBay Web 服务错误 - javax.net.ssl.SSLHandshakeException:无效填充长度:175
- c - 过滤 AT+CSQ 响应