如何在vue组件中动态的删除路由的子组件或添加路由的子组件吗
遇到的问题是,在登录页面登录成功后台传过来权限,前端收到权限后,不知道如何去删除或者添加路由了,是子路由
在Vue中可以使用router.addRoutes和router.removeRoute方法来动态添加和删除路由。
// 获取动态添加的路由配置
const routes = [
{
path: '/newroute',
component: () => import('@/views/NewRoute.vue'),
name: 'New Route'
}
]
// 动态添加路由
this.$router.addRoutes(routes);
// 删除
// 遍历所有子路由
this.$router.options.routes.forEach(route => {
if (route.path === '/oldroute') {
// 找到要删除的路由并删除
const index = this.$router.options.routes.indexOf(route);
this.$router.options.routes.splice(index, 1);
// 更新路由
this.$router.matcher = new VueRouter({routes: this.$router.options.routes}).matcher;
}
});
一般需要根据不同角色设置路由菜单让后端将路由菜单返回给你比较好,或者你可以在本地路由中设置一个放置权限码的地方,例如
vue-router官方的动态添加路由规则的API,删除的话没有API,直接F5刷新之后,动态添加的就不存在了,需要重新添加
官方文档(单项数据流,你不应该在一个子组件内部改变 prop)给出的答案是否定的。
虽然官方建议不要在组件内部修改prop,但是在现实中,修改组件内部的prop实属平常事(*当你传入的prop为Object类型的时候,修改组件内部的prop可以对应的改变父组件中的值。如果传入的prop为简单类型(例如String,Number等)时,浏览器会报错,提示不能修改prop的值。)
那么,这样做有什么问题呢?
这样会导致父组件的数据指向不明,容易出现渲染问题。
回答:
在Vue中,我们可以通过动态传递参数的方式,控制路由的子组件的添加和删除。具体步骤如下:
1.在路由配置文件中,定义动态路由。例如:
{
path: '/dashboard',
name: 'Dashboard',
component: Dashboard,
children: [
{
path: 'add',
name: 'Add',
component: Add
},
{
path: 'edit/:id',
name: 'Edit',
component: Edit
}
]
}
2.在组件中,通过编程式导航方式,实现动态添加和删除子组件。
例如,我们可以定义一个按钮,用来控制添加和删除操作:
<template>
<div>
<button @click="addSub">Add Sub Component</button>
<button @click="delSub">Delete Sub Component</button>
<router-view></router-view>
</div>
</template>
在组件中,通过编写方法实现动态添加和删除子组件:
<script>
export default {
name: 'Dashboard',
methods: {
addSub() {
this.$router.addRoutes([
{ // 新增一个子路由
path: 'new',
component: NewComponent
}
])
},
delSub() {
this.$router.matcher.removeRoutes([
{ // 删除一个子路由
path: 'new'
}
])
}
}
}
</script>
注意:上述代码仅为示意,实际代码需根据实际场景进行修改。
另外,通过登录后获取权限信息来动态添加或删除子组件,可以在登录成功后,将权限信息存储在Vue的全局状态管理中(例如:Vuex),然后在组件中进行判断,根据权限信息动态添加或删除对应的子组件。
总之,动态添加和删除子组件的实现方法在Vue中是比较灵活的,可以根据实际需求进行调整。