现在有一个table表格,我要点击每行的编辑按钮,然后根据id跳转到编辑页面进行编辑,跳转的编辑页面是editProgramCom.vue,怎么操作,跳转之前的页面是program.vue,router页面又怎么操作呢?加上id我老是404, 技术栈是vue3+ts。
时间: 2024-10-09 09:13:23 浏览: 45
在Vue3 + TypeScript项目中,你可以通过以下步骤来解决这个问题:
1. **在`program.vue`组件中**:
- 首先,在需要编辑功能的行元素上添加一个编辑按钮。例如,假设你在`<tr>`标签内有类似这样的按钮:
```html
<template>
<td>
<button @click="editProgram(id)">编辑</button>
</td>
</template>
```
- 接下来,在组件内部的methods里定义`editProgram`方法,它接收`id`作为参数:
```typescript
import { ref } from 'vue';
export default {
setup() {
const id = ref(null); // 假设表格数据已绑定到"data"属性
function editProgram(_id) {
id.value = _id; // 设置当前被选中的id
this.$router.push(`/editProgramCom/${id.value}`); // 跳转到编辑页面
}
return { id, editProgram };
},
};
```
2. **在`router`配置文件中 (`router.ts` 或 `routes.js`)**:
- 创建路由规则,匹配编辑页面的路径,例如:
```javascript
import { Route } from 'vue-router';
const routes: Array<Route> = [
// 其他路由...
{
path: '/editProgramCom/:id', // 使用动态路由参数 :id
name: 'editProgramCom',
component: () => import('@/views/EditProgramCom.vue'), // 引入编辑页面组件
},
];
```
3. **处理`404`问题**:
- 如果`404`是因为ID不存在或者路径格式错误,可以在路由守卫(如`beforeEach`)中添加检查,避免无效跳转。示例:
```javascript
import { useRoute } from 'vue-router';
router.beforeEach((to, from, next) => {
const route = useRoute();
if (route.name === 'editProgramCom') {
const programId = parseInt(route.params.id);
// 检查id是否存在并且有效
if (!isNaN(programId)) {
fetchProgramData(programId).then(data => {
if (data) {
next(); // 数据存在,正常跳转
} else {
// 数据不存在或错误,可以重定向到列表页或其他提示页面
next(`/program`);
}
});
} else {
next(`/program`); // 无效ID,直接回列表页
}
} else {
next(); // 非编辑页面,正常跳转
}
});
// 这里的fetchProgramData是你实际的数据获取函数,用于验证id是否能找到对应的记录
async function fetchProgramData(id) {
// ... 实现查询数据库或API逻辑
}
```
现在当你点击“编辑”按钮时,会根据id跳转到`editProgramCom.vue`,并在路由守卫中做必要的错误处理。如果`id`不存在或者请求失败,将返回`/program`页面。
阅读全文