Vue Router

Vue Router

安装:npm install vue-router -S
配置:
1.在router文件夹下创建一个router.js
2.router.js下

  • import Vue from ‘vue’
  • import VueRouter from ‘vue-router’
  • Vue.use(VueRouter) 安装|注册到全局
  • const router = new VueRouter({mode: ‘history’,routes})
  • export default router

3.在main.js中引入router.js
使用:
1.使用路由 (去哪)

  • < router-link to="/home">首页< /router-link>
  • < router-view>展示区< /router-view>
  • router-link 组件属性
    to="/home"
    tag='li' 指定编译后的标签
    active-class='类名' 指定激活后的样式
    

2.配置路由(建立组件和请求的对应关系) 数组

  • [{path:’/home’,component:home},{}]
  • path 路径
    component: 指向的组件变量名
    

3.创建路由(传递配置)

  • router = new VueRouter(配置)
    配置: {routes:数组}

4.顶层|根组件,注册路由 (路由控制页面组件的加载)

  • 选项
    router(选项):router (router对象)
  • 子路由:children
    routes=[{},{path:xx,component:xx,children:[ 子路由 {}… ]},{}]

5.动态路由配置

 {path:'xx/:参数变量',component:xx}
 {path:'/', redirect:'/home'},	//这个是在后面接上/时能直接跳转到home页面

6.传递/接收参数 和 数据

 router-link to='xx/参数?a=1&b=2'
 router-link :to='{name:'xx',params:{id:1},query:{a:2,b:3}}'

 接收参数和数据
   模板:	{{$route.params|query|path}} 
   组件: this.$route.xxx

7.路由跳转

  • 声明式:< router-link :to="…">
  •   编程式:
        this.$router.push({name:'...'})   添加一个路由 (记录到历史记录)
        this.$router.replace({name:'...'})   替换一个路由 (不记录到历史记录)
        this.$router.go(-1|1)|goBack()  回退/前进  history.go|goBack
    

8.路由模式
mode: hash默认带# | history

new VueRouter({mode:xx})

9.路由守卫

  • 全局守卫
  •    beforeEach((to, from, next) => {
         // ...
       })
       router.afterEach((to, from) => {
         // ...
       })
    
  • 路由独享的守卫
  •    beforeEnter: (to, from, next) => {
       	// ...
       }
    
  • 组件内的守卫
  •   beforeRouteEnter(to,from,next){}	前置守卫,进入
         to 目标路由
         from 当前路由
         next 是个函数  next() == next(true)  运行跳转
                 next(false) 不让跳转
                 next('字符路径')/next({对象路径}) 重定向
    
       beforeRouteLeave(to,from,next){}  后置守卫,离开
       beforeRouteUpdate (to, from, next) {
         // ...
       }
    
  • 路由数据预载:
  •  beforeRouteEnter(to,from,next){
       1. 数据附加到目标路由上 to.query.数据名=值
       2. next( _this => _this.属性="拿到的数据")   √
     }
    

router.js

import Vue from 'vue'
import VueRouter from 'vue-router'
import Home from '../views/Home.vue'
import My from '../views/My.vue'
import Detail from '../views/Detail.vue'
import Message from '../views/Message.vue'
import Goods from '../views/Goods.vue'
import Login from '../views/Login.vue'
import Error from '../views/Error.vue'

Vue.use(VueRouter)

  const routes = [
  {path: '/home',name: 'Home',component: Home},
  {path: '/',redirect:'/home'}, //这个是在后面接上/时能直接跳转到home页面
  {path: '/message',name: 'Message',component:Message},
  {path: '/my',name: 'My',component: My},
  {path: '/login',name: 'Login',component: Login},
  
  {path: '/goods',name: 'Goods',component:Goods,
  children:[{name:'detail',path:'/detail/:id',component:Detail}]
  },
  {path: '*',name: 'Error',component: Error},

  ]

const router = new VueRouter({
  mode: 'history',
  base: process.env.BASE_URL,
  routes
})

export default router

main.js

import Vue from 'vue'
import App from './App.vue'
import router from './router/router'

Vue.config.productionTip = false

new Vue({
  router,
  render: h => h(App)
}).$mount('#app')

App.vue

<template>
  <div id="app">
    <div id="nav">
      <router-link to="/home" active-class='bckg'>Home</router-link> |
      <router-link to="/message" active-class='bckg'>Message</router-link> |
      <router-link to="/my" active-class='bckg'>My</router-link> |
      <router-link to="/login" active-class='bckg'>Login</router-link> |
      <router-link to="/goods" active-class='bckg' tag='li'>Goods</router-link>  
    </div>
    <router-view/>
  </div>
</template>

<style>
.bckg{background:#f0f}
</style>

Goods.vue

<template>
  <div class="goods">
    <h1>This is an goods page</h1>
    <router-link to="/goods/1">商品001</router-link>
    <router-link to="/goods/2?a=1&b=2">商品002</router-link>
    <!-- <router-link to="/goods/a/b/c/d/e/f/3?a=1&b=2">商品003</router-link> -->
    <router-link :to="{name:'detail',params:{id:3},query:{a:11,b:22}}">商品003</router-link>

    <router-view>子展示区</router-view>
  </div>
</template>

Detail.vue

<template>
  <div class="detail">
    <h1>This is an detail page</h1>

    {{this.$route.params}}/{{this.$route.query}}
  </div>
</template>
### Vue Router 使用指南 Vue Router 是官方的路由管理器,用于构建单页面应用程序 (SPA)[^1]。为了使 Vue 应用程序能够处理不同的 URL 并呈现相应的组件,需要安装并配置 Vue Router。 #### 安装与初始化 要使用 Vue Router,首先需通过 npm 或 yarn 安装它: ```bash npm install vue-router@next --save ``` 或者 ```bash yarn add vue-router@next ``` 接着,在项目中引入 `VueRouter` 和 `createRouter` 函数来创建路由器实例,并将其挂载到 Vue 实例上[^1]。 ```javascript import { createApp } from 'vue'; import App from './App.vue'; import { createRouter, createWebHistory } from 'vue-router'; const app = createApp(App); app.use(createRouter({ history: createWebHistory(), routes: [ { path: '/', name: 'home', component: () => import('./components/Home.vue') }, // 更多路径... ] })); app.mount('#app'); ``` #### 嵌套路由设置 当遇到子级视图无法正常渲染的情况时,通常是因为父组件缺少 `<router-view>` 标签或是未正确定义嵌套结构。确保每个具有子路由的父组件都包含此标签以便加载对应的子组件。 ```html <template> <div class="parent"> <!-- 父组件内容 --> <router-view></router-view> <!-- 子组件会在这里被渲染 --> </div> </template> <script setup lang="ts"> // ... </script> ``` 对于更复杂的布局需求,可以定义多个命名视图,从而允许在同一级别下展示不同区域的内容。 #### 解决常见问题 如果发现路由变化后页面不更新,则可能是因为忘记了调用 `$forceUpdate()` 方法或存在缓存机制干扰;另外还需确认是否正确设置了动态参数匹配模式以及重定向逻辑等细节。 #### 配置懒加载 为了避免一次性加载过多资源影响性能,推荐采用按需加载的方式引入组件。上述例子中的 `component` 字段即展示了如何利用 ES6 的异步模块特性实现这一点。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值