首页 > 其他分享 >vue-router

vue-router

时间:2022-10-14 21:34:58浏览次数:40  
标签:vue component path 组件 router 路由

vue-router

  • vue的路由解决方案
  • 点击指定标签(a),地址栏(hash/history)发生变化,在指定的元素内(路由容器)显示指定的html字符串(组件)

安装

  • npm install vue-router -S

创建并挂载路由实例

// @/router/index.js
// 0 导入vue-router里面的createRouter
import {createRouter,createWebHashHistory,createWebHistory} from 'vue-router'
// 1. 导入路由组件
import Login from '@/views/login.vue'
import Layout from '@/views/layout.vue'

// 2. 定义 地址栏hash/history 和要显示组件之间的关系
// path 定义路径
// component 定义要显示的组件
const routes = [
  { path: '/login', component: Login },
  { path: '/banner', component: Layout },
  { path: '/prod', component: Layout },
  { path: '/user', component: Layout },
  { path: '/data', component: Layout },
  { path: '/edit', component: Layout },
  { path: '/execl', component: Layout },
  { path: '/map', component: Layout },
]

// 3. 创建路由实例并传递 `routes` 配置
const router = createRouter({
  // 4. 内部提供了模式的实现
  history: createWebHashHistory(), // hash模式,#
  routes // `routes`:routes 的简写
})

// 5. 导入vueRouter实例
export default router;
// @/main.js
import router from '@/router'
// ....
app.use(router)
// ...

路由视图 - 用于展示匹配的路由组件的

  • <RouterView></RouterView>

导航方式

  • 声明式导航
    • 通过点击标签来完成的
    • 通过router-link组件来完成
  • 编程式导航
    • 通过js代码来完成
    • this.$router.push('/login')
    • this.$router.push({path:'/login'})
    • this.$router.go(n) - n是正数表示前进几个路由,是负数表示后退几个路由
    • this.$router.back() - 后退
    • 类似location.href,history.back(),history.go(),...

路由重定向

  • {path:'/',redirect:'/login'}
  • 当匹配到一个路由的时候,希望直接跳转到另一个路由,可以使用重定向
  • 重定向以后,路由会变成新的路由

通配符

  • 以前是*,现在要用
    • 匹配多个/的路由
      • { path: '/:pathMatch(.*)*' ,component:NotFount }
    • 匹配一个/的路由
      • { path: '/:pathMatch(.*)' ,component:NotFount }

嵌套路由

  • 在匹配的路由里面书写children属性
  • children是一个数组,里面的每一个对象写法和路由写法一样
const routes = [
  // ...
  { 
    path: '/prod', 
    component: Layout,
    // 嵌套路由
    children:[
      {path:'list',component:Prolist},
      {path:'recommend',component:Recommend},
      {path:'secskill',component:Secskill},
      {path:'select',component:Select},
    ]
  }
]

$router和$route

  • 组件里面的this.$router是总的路由实例,可以使用 push,go,back等编程式导航方法
    • 在组合式api中,使用 useRouter() 获取
    • const router = useRouter()
  • 组件里面的this.$route是当前匹配的路由信息对象,可以有
    • path:匹配到的路由地址
    • fullPath: 匹配到的路由地址
    • 在组合式api中,使用 useRoute() 获取
    • const route = useRoute()

命名路由

  • 给路由设置一个name属性,通过路由可以跳转
  • 地址栏不会变成路由名,还是显示path定义的路由地址
    • 编程式导航: this.$router.push({name:'路由名'})
    • 声明式导航: <router-link :to='{name:'路由名'}'></router-link>

matched

  • this.$route.matched 是一个数组
  • 是当前匹配的路由及其上层所有路由信息
  • 0 最上层的路有个
  • length-1 当前路由

导航守卫

  • 全局守卫
    • router.beforeEach((to,from)=>{return true})
    • router.beforeResolve
    • router.afterEach
    • to 去哪里的路由对象
    • from 从哪里来的路由对象
    • 回调函数返回值:true表示继续进入,false就不允许进入
  • 路由独享守卫
    • beforeEnter
  • 组件内守卫
    • beforeRouteEnter
    • beforeRouteUpdate
    • beforeRouteLeave

命名视图

  • 给router-view一个name
  • 如果路由匹配的时候要显示多个组件
  • 就要给每个组件指定一个router-view的name
  • 如果不指定,显示在name叫default的router-view中
  • 只显示一个组件:{path:'oneman',component:One}
  • 显示多个组件: {path:'threeman',components:{one:One,two:Two,default:Three}}

标签:vue,component,path,组件,router,路由
From: https://www.cnblogs.com/maxiaohu/p/16793098.html

相关文章

  • Vue路由跳转后,页面和滚动条不在最顶部。
    在路由跳转后,页面以及滚动条保持在当前位置,没用回到最顶部怎么办?解决方法如下:在main.js中加入以下代码router.afterEach((to,from,next)=>{window.scrollTo(0,0)})......
  • 前端Vue2-Day50
    Vue内置指令:v-bind:单向绑定解析表达式,可简写为:xxx。v-model:双向数据绑定。v-for:遍历对象、数组、字符串。v-if:条件渲染(动态控制节点是否存在)v-else:条件渲染(动态控制节......
  • Vue3 +elementUI + wangEditor 富文本编辑器
    哎呀,一个富文本编辑器折腾了我好久啊,刚开始找的就是wangEditor,但是上传图片的调接口,我就寻思找个简单的,后来换了quill可以不调接口上传图片,但是v-model绑定不了,而且一直......
  • Vue3动态路由传参;获取动态路由传入参数;
           路由文件,配置动态路由( /:  -后面的tabsItem为参数名称,参数名后的?号 -使参数可以为空而不报错  )1{2//关于我们3......
  • egg.js 24.3-24.5router路由相关
    编写路由基础用法//router.jsrouter.get('/admin/:id',controller.admin.index);//controllerasyncindex(){const{ctx}=this;//获取路由get传值参数(路由......
  • vue3 + pinia实现简单购物车功能
    这个小例子是学习vue3与pinia状态管理工具时写的一个简单的购物车功能,它实现了从模拟接口(node.js的json-server提供)读取商品数据,到添加商品到购物车和购物车中删除商品......
  • vue3 + qiankun(微前端)
    主服务路由配置constrouter=createRouter({history:createWebHistory(),routes:[{path:`/jupiter:page*`,name:`jupiter`,compo......
  • vite vue3 规范化与Git Hooks
    在《JS模块化》系列开篇中,曾提到前端技术的发展不断融入很多后端思想,形成前端的“四个现代化”:工程化、模块化、规范化、流程化。在该系列文章中已详细介绍了模块化的发......
  • React Router初识
    相关网址:​​官方地址​​​​ReactRouter中文文档​​​​React-Router入门教程​​​​简书:ReactRouter教程​​​​阮一峰教程​​​​GitHub地址​​ReactRouter是......
  • Vue的基本原理
    创建vue实例,会遍历data中的属性,由object.defineProperty将其转为getter和setter,并追踪其依赖,当属性被访问或发生改变时会通知相应的watcher程序段在组件渲染的过程钟将其标......