首先创建具有 3 个页面的 vue-router,第一个用于显示您的项目列表的主页,第二个页面用于项目页面,第三个将是您的 TaskLists 页面
const routes = [
{
name: "home",
path: "/",
component: () => import("./pages/Home.vue")
},
{
name: "project",
path: "/project/:projectId",
component: () => import("./pages/Project.vue"),
props: true
},
{
name: "taskLists",
path: "/project/:projectId/tasks",
component: () => import("./pages/TaskLists.vue"),
props: true
}
];
所以您的App.vue 将只包含<router-view>,而您的主页将移动到Home.vue。
然后添加Project.vue组件在点击查看项目时推送到项目页面,还需要发送projectId作为参数
showProject(id) {
this.$router.push({
name: "project",
params: {
projectId: this.project.id
}
});
}
添加从参数获取projectId 的Project 页面,并从JSON 中查找数据,我为此使用了计算属性
props: ["projectId"],
computed: {
project() {
return projectsData.find(p => p.id === parseInt(this.projectId, 10));
}
},
添加与项目页面类似的TaskLists 页面,但您只是显示任务列表。
props: ["projectId"],
computed: {
taskLists() {
return projectsData.find(p => p.id === parseInt(this.projectId, 10))
.task_lists.data;
}
},
对于返回按钮,只需使用router-link,如果您在Project 页面上按Go Back 按钮,它将返回到Home 页面:
<router-link :to="{name:'home'}">Go back</router-link>
如果你在TaskLists页面上按下Go Back按钮,它将返回Project页面并传递projectId作为参数:
<router-link :to="{name:'project', params: {projectId}}">Go back</router-link>
完整的工作示例:https://codesandbox.io/s/how-to-navigate-through-nested-json-forked-fd27x