vue-router

vue-router

1.vue-router基本使用

1.1安装

javascript 复制代码
//如果创建项目时已经下载则忽略这一步
npm install vue-router

1.2 创建路由器实例

路由器实例是通过调用 createRouter() 函数创建的:

javascript 复制代码
import Vue from 'vue'   //引入Vue
import VueRouter from 'vue-router'  //引入vue-router
import HomeView from './HomeView.vue'//引入路由组件
import AboutView from './AboutView.vue'
Vue.use(VueRoute)//注册vuerouter
const routes = [
  { path: '/', component: HomeView },
  { path: '/about', component: AboutView },
]
//创建并暴露一个vue实例
export default new VueRouter({
  mode:'history',
  routes
})

1.3 注入Vue实例

javascript 复制代码
import router from './router/index.js'
new Vue({
render: h => h(App),
router
}).$mount('#app')

2.声明式路由导航

2.1导航链接

全局组件 router-link (取代 a 标签)

功能:

  • ① 能跳转,配置 to 属性指定路径(必须) 。本质还是 a 标签 ,to 无需 #
  • ② 能高亮,默认就会提供高亮类名,可以直接设置高亮样式

2.2两个类名

  • 1.router-link-active

    模糊匹配(用的多)

    to="/my" 可以匹配 /my /my/a /my/b ...

    只要是以/my开头的路径 都可以和 to="/my"匹配到

  • 2.router-link-exact-active

    精确匹配

    to="/my" 仅可以匹配 /my

2.2.1声明式导航-自定义类名(了解)

  • 1.问题

    router-link的两个高亮类名 太长了,我们希望能定制怎么办

  • 2.解决方案

    我们可以在创建路由对象时,额外配置两个配置项即可。 linkActiveClass和linkExactActiveClass

javascript 复制代码
const router = new VueRouter({
  routes: [...],
  linkActiveClass: "类名1",
  linkExactActiveClass: "类名2"
})

示例

javascript 复制代码
// 创建了一个路由对象
const router = new VueRouter({
  routes: [
    ...
  ], 
  linkActiveClass: 'active', // 配置模糊匹配的类名
  linkExactActiveClass: 'exact-active' // 配置精确匹配的类名
})

3.路由传参

3.1 路由的querry参数

3.1.1传参
  • 模版字符串写法
javascript 复制代码
  <router-link :to="`/a?num=${money}&people=${you}`">a</router-link>|

  • 对象写法
javascript 复制代码
 <router-link :to="{
      path: '/b',
      query: {
        num: money1,
        people: you1
      }
    }">b</router-link>
3.1.2接收参数(this.$route.query)
javascript 复制代码
   {{ $route.query.num}}
   {{ $route.query.people}}

3.2 路由的params参数

跟query参数一样,都是两种形式,不过params与之不同的是,它对象形式不能写path,要写路由的命名。

3.2.1传参
  • 字符串写法
javascript 复制代码
 <router-link to="/b/小李/20">b</router-link>
  • 对象写法
javascript 复制代码
    <router-link :to="{
      name:'那一那',
      params:{
        name:money1,
        age:you1
      }
    }">b</router-link>
3.2.2接收
javascript 复制代码
   {{ $route.params.name}}
   {{ $route.params.age}}
3.2.3 在路径配置里面写占位符
javascript 复制代码
const routes = [
  { path: '/a/:name/:age', component: rout1 },
  { path: '/b/:name/:age', component: rout2 }
]

3.3 props传参

  • 对象式
    传参
javascript 复制代码
  { path: '/b/:name/:age', name:'那一那',component: rout2 ,props:{'那一那':'大被他'}}
  • 函数式
javascript 复制代码
  { path: '/b', name:'那一那',component: rout2 ,props({query}){return {
a:query.name,b:query.age
  }}}
  • 布尔值(只应用于params参数)
    传参
javascript 复制代码
{ path: '/a/:name/:age', component: rout1,props:true},

3.3.1 props接收
javascript 复制代码
  props:['a','b']

4.的两种跳转模式

的replace与push属性

  • push(默认)
    有新网址的时候 ,它是往历史网页记录里面追加的。
  • replace
    有新网址的时候 ,它直接把旧网址干掉并替换,不会保存旧网址

4.1如何开启replace模式

在标签内添加一个:replace="true"属性。因为值为true,直接写

javascript 复制代码
<router-link :replace="true" :to="`/a/${money}/${you}`">a</router-link>|
//或
<router-link replace :to="`/a/${money}/${you}`">a</router-link>|

5.编程式路由导航

5.1作用:

不借助实现路由跳转,让路由跳转更加灵活

5.2 API

借用this.$router的push和replace属性

  • this.$router.push({})

  • this.$router.replace({})

  • 其他API

    • this.$router.forward()
    • this.$router.back()
    • this.$router.go(n)前进n
    • this.$router.go(-n)后退n

6.缓存路由组件(keep-alive组件)

6.1 作用

让不展示的路由组件保持挂载,不被销毁

6.2 实现

  • 缓存展示区的一个组件
  • 缓存展示区的多个组件

6.3 include属性

include这可以指定某个/某些组件切换走不被销毁,如果没有指定具体的组件,那么能够在该展示区展示的组件都不会被销毁

相关推荐
苹果酱05672 分钟前
「Mysql优化大师一」mysql服务性能剖析工具
java·vue.js·spring boot·mysql·课程设计
gqkmiss35 分钟前
Chrome 浏览器插件获取网页 iframe 中的 window 对象
前端·chrome·iframe·postmessage·chrome 插件
m0_748247553 小时前
Web 应用项目开发全流程解析与实战经验分享
开发语言·前端·php
m0_748255023 小时前
前端常用算法集合
前端·算法
真的很上进3 小时前
如何借助 Babel+TS+ESLint 构建现代 JS 工程环境?
java·前端·javascript·css·react.js·vue·html
web130933203984 小时前
vue elementUI form组件动态添加el-form-item并且动态添加rules必填项校验方法
前端·vue.js·elementui
NiNg_1_2344 小时前
Echarts连接数据库,实时绘制图表详解
前端·数据库·echarts
如若1235 小时前
对文件内的文件名生成目录,方便查阅
java·前端·python
滚雪球~5 小时前
npm error code ETIMEDOUT
前端·npm·node.js
沙漏无语5 小时前
npm : 无法加载文件 D:\Nodejs\node_global\npm.ps1,因为在此系统上禁止运行脚本
前端·npm·node.js