vue.js - 在 VueJS 中隐藏某些路由上的动态布局
问题描述
我通过以下方式设置动态布局:
LayoutDefault.vue
<template>
<div class="LayoutDefault">
<nav>
.
.
.
</nav>
<slot />
</div>
</template>
LayoutDefaultDynamic.js
import LayoutDefault from './LayoutDefault.vue'
export default {
name: 'LayoutDefaultDynamic',
created() {
this.$parent.$emit('update:layout', LayoutDefault);
},
render() {
return this.$slots.default[0];
},
};
现在在一些组件中我使用这个布局:
<template>
<!-- Use layout-defualt component for rendering certain layout in this page-->
<layout-default-dynamic>
<v-container fluid class="grid-container">
.
.
.
</layout-default-dynamic>
但是有些组件我不使用任何布局。这就是我的设置方式App.vue
:
<template>
<v-app>
<component :is="layout">
<transition name="fade" mode="out-in">
<router-view :layout.sync="layout" />
</transition>
</component>
</v-app>
</template>
<script>
export default {
name: "App",
data() {
return {
layout: "div",
};
}
};
</script>
问题是,当我转到未包含在内的路线(页面)时,<layout-default-dynamic>
我仍然可以在它们上看到该布局。有没有办法排除这些路线以在它们上显示此布局?
解决方案
如果我理解正确,您可以在 Vue 路由器中使用嵌套路由。您创建两个布局并将它们添加为顶级路线并向它们添加子路线。我创建了示例应用程序来展示我的案例。
AdminLayout.vue
在我的示例中,我创建DefaultLayout.vue
了以下内容:
//admin layout.
<template>
<div>
<h1>Admin Layout</h1>
<router-view></router-view>
</div>
</template>
<script>
export default {
name: "admin-layout"
};
</script>
//default layout.
<template>
<div>
<img alt="Vue logo" src="../assets/logo.png">
<h1>Default Layout</h1>
<div id="nav">
<router-link to="/home">Home</router-link>|
<router-link to="/about">About</router-link>|
<router-link to="/admin/user">User</router-link>
</div>
<router-view></router-view>
</div>
</template>
<script>
export default {
name: "default-layout"
};
</script>
请注意,每个布局都有自己的<router-view></router-view>
.
在路由文件中,我定义了我的路由,例如:
const routes = [
{
path: "/",
name: "default",
component: DefaultLayout,
children: [
{
path: "/home",
name: "home",
component: Home
},
{
path: "/about",
name: "About",
component: About
}
]
},
{
path: "/admin",
name: "admin",
component: AdminLayout,
children: [
{
path: "user",
name: "name",
component: User
}
]
}
];
现在任何嵌套的路由都/admin
将使用AdminLayout
和相同的/
路由。您可以检查示例:
推荐阅读
- apache-kafka - 获取所有写入特定主题的 Kafka 源连接器
- vue.js - 如何使用数组中的 CASL 定义能力
- android - 如何使下部导航栏显示活动中的最后一件事?
- javascript - 将@click事件添加到vuejs中的文本
- bash - 如何将 docker build 命令参数传递给 bash 文件
- vb.net - 在 VB.NET 中从 ListView 导出 CSV
- tensorflow - 当两个层使用不同的过滤器编号连接时,Conv2D 如何在 Tensorflow/PyTorch 中工作?
- python - 用 PyTorch 训练的神经网络输出每个输入的平均值
- laravel - Laravel 路由问题:“模型没有查询结果”
- reactjs - React + Webpack 5 + Babel 7 IE11 问题——不附加到根