首页 > 其他分享 >Vite4+Typescript+Vue3+Pinia 从零搭建(5) - 路由router

Vite4+Typescript+Vue3+Pinia 从零搭建(5) - 路由router

时间:2023-11-29 22:46:43浏览次数:50  
标签:Typescript const Vue3 ts vue Pinia import router 路由

项目代码同步至码云 weiz-vue3-template
Vue Router 是 Vue.js 的官方路由。它与 Vue.js 核心深度集成,让用 Vue.js 构建单页应用变得轻而易举。

1. 安装

npm i vue-router@4

2. 集成

1. 新建两页面进行示例

src/view下新建home.vuelogin.vue,内容如下:

<script setup lang="ts">
defineOptions({
  name: 'V-home'
})
</script>

<template>
  <div>home page</div>
</template>

<style lang="scss" scoped></style>

login.vue里修改下对应name即可

2. src下新建router文件夹

index.ts作为路由入口,static.ts作为静态路由,modules内还可以放入其他类型路由,整体目录结构如下:

src
|   
+---router
|   |   index.ts
|   +---modules
|       |   static.ts

static.ts内容如下:

const routes = [
  {
    path: '/',
    component: () => import('@/views/home.vue')
  },
  {
    path: '/login',
    component: () => import('@/views/login.vue') //路由懒加载
  }
]

export default routes

index.ts内容如下:

import { Router, createRouter, createWebHistory } from 'vue-router'

/** 自动导入 src/router/modules 下的静态路由
 * import.meta.glob使用说明:https://cn.vitejs.dev/guide/features#glob-import
 */
const modules: Record<string, any> = import.meta.glob(['./modules/**/*.ts'], {
  eager: true
})

/** 初始路由 **/
const routes: any[] = []

Object.keys(modules).forEach((key) => {
  const module = modules[key].default
  if (Array.isArray(module)) {
    for (const item of module) {
      routes.push(item)
    }
  } else {
    routes.push(module)
  }
})

/**
 * 创建路由实例
 * createRouter选项有:https://router.vuejs.org/zh/api/interfaces/RouterOptions.html
 * hash模式使用createWebHashHistory(): https://router.vuejs.org/zh/api/#Functions-createWebHashHistory
 */
export const router: Router = createRouter({
  history: createWebHistory(),
  routes,
  strict: true,
  scrollBehavior(_to, from, savedPosition) {
    return new Promise((resolve) => {
      if (savedPosition) {
        return savedPosition
      } else {
        if (from.meta.saveSrollTop) {
          const top: number = document.documentElement.scrollTop || document.body.scrollTop
          resolve({ left: 0, top })
        }
      }
    })
  }
})

/**
 * 路由守卫
 * https://router.vuejs.org/zh/guide/advanced/navigation-guards.html
 */
router.beforeEach((to, _from, next) => {
  // isAuthenticated 代表你的鉴权
  const isAuthenticated = true
  if (to.name !== 'Login' && !isAuthenticated) next({ name: 'Login' })
  else next()
})

export default router

3. 修改App.vue

承载路由,并增加导航

<script setup lang="ts"></script>

<template>
  <router-link to="/"> 去首页 </router-link> 丨 <router-link to="/login"> 去登录 </router-link>
  <router-view />
</template>

<style scoped></style>

4. 修改main.ts

使用路由

import { createApp } from 'vue'
import './style.css'
import App from './App.vue'

import router from '@/router/index'

createApp(App).use(router).mount('#app')

3. 预览

image
其他用法,包括传参、重定向、动态路由、过渡动效等,请参考官方文档

标签:Typescript,const,Vue3,ts,vue,Pinia,import,router,路由
From: https://www.cnblogs.com/weizwz/p/17866084.html

相关文章

  • vue3+vite 代码混淆插件 | JavaScript obfuscator
    安装插件yarnadd--devrollup-plugin-javascript-obfuscator创建obfuscator.js文件,把下面相应代码放入js文件中importobfuscatorPluginfrom'rollup-plugin-javascript-obfuscator';exportfunctioncodeObfuscatorPlugin(isBuild){if(!isBuild){return[];}......
  • vue3 reactive对象的watch
    代码<scriptsetup>import{ref,reactive,watch}from'vue'constobj=reactive({count:0})constyourKnow0=ref('')constyourKnow1=ref('')letcnt=0watch(obj,(newValue,oldValue)=>{//在嵌套的属性变更时触发......
  • vue2和vue3项目并存时,下载nvm管理nodejs
    1、下载nvm  1)下载一个1.19版本以上的nvm,在执行“npminstall”时报错“npmERR!Unexpectedtoken'.'”。。https://blog.csdn.net/qq_25286361/article/details/1328999372)在nvm/setting.txt中,加入node_mirror:https://npm.taobao.org/mirrors/node/......
  • vue3结构赋值失去响应式引发的问题思考
    前言vue3是基于proxy实现响应式的能力,解决了vue2所遗留下来的一些问题,同时也正由于proxy的特性,也提高了运行时的性能凡事有利有弊,proxy虽然无敌,但是他也有本身的局限,从而产生一些认为的弊端原始值的响应式系统的实现导致必须将他包装为一个对象,通过.value的方式访......
  • Vue3 + Express 实现大文件分片上传、断点续传、秒传
    前言在日常开发中,文件上传是常见的操作之一。文件上传技术使得用户可以方便地将本地文件上传到Web服务器上,这在许多场景下都是必需的,比如网盘上传、头像上传等。但是当需要上传比较大的文件的时候,容易碰到以下问题:上传时间比较久;中间一旦出错就需要重新上传;一般服务端会对......
  • 【VUE基础】VUE3核心语法
    setupsetup是Vue3中一个新的配置项,值是一个函数,它是CompositionAPI“表演的舞台”,组件中所用到的:数据、方法、计算属性、监视......等等,均配置在setup中。特点如下:setup函数返回的对象中的内容,可直接在模板中使用。setup中访问this是undefined。setup函数会在beforeCreat......
  • Vite4+Typescript+Vue3+Pinia 从零搭建(4) - 代码规范
    项目代码同步至码云weiz-vue3-template要求代码规范,主要是为了提高多人协同和代码维护效率,结合到此项目,具体工作就是为项目配置eslint和prettier。editorconfig安装EditorConfigforVSCode插件,根目录下新建.editorconfig文件,增加以下配置[*.{js,jsx,ts,tsx,vue}]......
  • 记录后端不同请求方式的接口,使用vue3框架下的前端axio请求不同写法
    一.后端接口:@GetMapping("/index")publicResponseResultindex(){..} 前端接口:indexInfo().then(res=>{if(res.data.code==200){ElNotification({message:res.data.data.msg||"加载成功",ty......
  • 学习Vue3 第五章(Vue核心虚拟Dom和 diff 算法)
      介绍虚拟DOM虚拟DOM就是通过JS来生成一个AST节点树   为什么要有虚拟DOM?一个dom上面的属性是非常多的,所以直接操作DOM非常浪费性能介绍Diff算法diff算法的目的就是找出新旧不同虚拟DOM之间的差异,使最小化的更新视图,所以diff算法本质上就是......
  • 学习Vue3 第四章 vue指令
    指令v-开头都是vue的指令v-text用来显示文本v-html用来展示富文本v-if用来控制元素的显示隐藏(切换真假DOM)v-else-if表示v-if的“elseif块”。可以链式调用v-elsev-if条件收尾语句v-show用来控制元......