描述:
系统使用 vite + TS + Vue3 + Element-Plus + VueRoute4 + Piana
系统搭建
使用vite创建vue3项目
npm create vite@latest安装项目所需插件
npm install vue-router@next element-plus axios pinia -D可以安装sass支持
npm install -g sass配置路径别名@
在vite.config.ts中添加如下代码(如果找不到要引入的path模块,则可以尝试安装):
npm install @types/nodeimport { join } from 'path'
export default defineConfig({
server: {
port: 8050, //设置项目启动端口
},
resolve: {
alias: {
'@': resolve('src'),
},
extensions: ['.mjs', '.js', '.ts', '.jsx', '.tsx', '.json', '.vue'] //自动识别路径下的index文件
},
})
在tsconfig.json中添加
{
"compilerOptions": {
"baseUrl": ".",
"paths": {
"@/*": ["src/*"]
}
},
}如果编辑器没有识别,VSCode可以安装Path Intellisense试试
VueRoute使用
在src中创建router/index.ts
import {
createRouter, createWebHistory
//,createWebHashHistory
} from 'vue-router'
const routes = [
{
path: '/',
meta:{title:"我是首页"},
component: () => import("@/views/layout/home")
},
{
path: '/login',
meta:{title:"登录"},
component: () => import("@/views/auth/login")
},
{
path: "/:pathMatch(.*)*",
redirect:'/404',
},
{
path: "/404",
name: "NotFound",
meta:{title:"NotFound"},
component: () => import("@/views/exception/404"),
}
]
const router = createRouter({
history: createWebHistory(),
//history:createWebHashHistory(),
routes,
})
//动态设置页面的title
router.beforeEach((to,from,next)=>{//beforeEach是router的钩子函数,在进入路由前执行
if(to.meta.title){//判断是否有标题
document.title = to.meta.title
}
next() //执行进入路由,如果不写就不会进入目标页
})
export default router;在main.ts中引入此插件,并使用它
import router from './router'
createApp(App)
.use(router)
.mount('#app')//内容视图 ,标签内会展示内容
<router-view></router-view>声名式路由跳转:
//声明式路由跳转 两种方式 加入 replace 不会留下历史记录
<router-link replace to="/login"><button>login</button></router-link>直接使用name跳转:
<router-link :to="{ name: 'Reg' }" style="margin-left: 10px"><button>reg</button></router-link>编程式路由导航 path :
import { useRouter } from "vue-router";
const router = useRouter();
router.push({
path: url, //这里回调写成对象,方便后面传参 push 写成 replace 不会留下历史记录
});路由传参:
query传参方式:
router.push({
path: "/reg",
// query 接受的是个对象{} item 此处item刚好是个对象 此时已经传过去参数了
query: item,
});query传参接收:
import { useRoute } from "vue-router"; // 获取参数 用 useRoute
const route = useRoute();params传参方式:
router.push({
name:"Reg" //这里的name是router/index.ts中配置的路由name
params:item
});接收时与query方式一致,都是用useRoute()
params参数保存在内存中,query参数会显示在地址中,所以params方式刷新后会导致丢失参数数据