这个所属公司里面我想动态添加几个从接口获取的二级行业并且生成对应的路由点击跳转不同的页面,这个在vue3和vite项目中要怎么实现呢
就比如这种效果
我想的是先通过rouer.option.route获取route,然后再拿到这个所属公司这个route,其次再获取接口拿到接口数据,通过addroute添加进去路由里面,然后我试了下这个方案不太行,而且会重复添加,我也不能设置一个变量去防止他重复添加,否则他一刷新页面,就不会添加了,这个有什么好的方案吗
这个所属公司里面我想动态添加几个从接口获取的二级行业并且生成对应的路由点击跳转不同的页面,这个在vue3和vite项目中要怎么实现呢
就比如这种效果
我想的是先通过rouer.option.route获取route,然后再拿到这个所属公司这个route,其次再获取接口拿到接口数据,通过addroute添加进去路由里面,然后我试了下这个方案不太行,而且会重复添加,我也不能设置一个变量去防止他重复添加,否则他一刷新页面,就不会添加了,这个有什么好的方案吗
在Vue3和Vite项目中动态添加路由,一种可能的解决方案是使用Vue Router的addRoute
方法。但是,你需要处理一些关键问题,如防止重复添加路由以及如何在页面刷新后保留已添加的路由。
以下是一个可能的实现方案:
addRoute
方法将新路由添加到Vue Router实例中。你可以通过检查现有路由是否存在来防止重复添加。以下是一个简化的代码示例:
import { ref, onMounted, onBeforeUnmount } from 'vue';
import { useRouter } from 'vue-router';
import axios from 'axios'; // 假设你使用axios作为HTTP客户端
export default {
setup() {
const router = useRouter();
const savedRoutes = ref([]); // 用于存储已添加的路由
const fetchData = async () => {
try {
const response = await axios.get('你的接口URL');
// 处理数据以生成路由结构
const routes = processData(response.data);
return routes;
} catch (error) {
console.error('Error fetching data:', error);
}
};
const addRoutes = (newRoutes) => {
newRoutes.forEach((route) => {
if (!router.currentRoutes.some((r) => r.path === route.path)) {
router.addRoute(route);
savedRoutes.value.push(route); // 保存已添加的路由
}
});
};
onMounted(async () => {
const newRoutes = await fetchData();
addRoutes(newRoutes);
});
onBeforeUnmount(() => {
// 在组件卸载前保存当前路由,以便在刷新页面后恢复它们
localStorage.setItem('savedRoutes', JSON.stringify(savedRoutes.value));
});
// 在应用启动时恢复已添加的路由(如果存在)
const savedRoutesData = localStorage.getItem('savedRoutes');
if (savedRoutesData) {
savedRoutes.value = JSON.parse(savedRoutesData);
savedRoutes.value.forEach((route) => {
router.addRoute(route); // 恢复已添加的路由
});
}
}
};
注意:这个示例假设你已经设置好了Vue 3和Vue Router,并且你的Vite项目已经配置了必要的插件来支持Vue Router。另外,你可能需要根据你的实际需求调整数据处理和路由结构部分。
10 回答11.1k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
3 回答5.1k 阅读✓ 已解决
3 回答1.8k 阅读✓ 已解决
2 回答4.7k 阅读✓ 已解决
你的思路是对的,重复添加的问题可以用
api
检测来避免。写了个简单的示例,你看看
https://stackblitz.com/edit/vitejs-vite-umhiqj?terminal=dev