vue-router

路由相关知识

a用户发送一条信息,经过路由,路由会根据映射表,通过电脑的Mac地址找到对应的ip,然后将信息转发出去

什么是前端渲染,,,什么是后端渲染,,,,什么是前后端分离

  • 后端渲染,传统的ASP、JSP、Java渲染机制
  • 前端渲染 ,使用JS来渲染也免得大部分内容,代表的是当前流行的SPA单页面富应用,优点是:局部刷新、懒加载、富交互、节约服务器成本、分离设计
  • 同构渲染指前后端共用JS,首次渲染使用node.js来直出HTML


    04-前端路由中url和组件的关系.jpg

    01-后端路由阶段.png
02-前端后端分离阶段.png
03-SPA页面页面的阶段.png

在不刷新页面的条件下,改变URL的两种方法

image.png

HTML5的History六中改变URL而不刷新页面

  • replaceState:替换原来的路径(替换路径,不能返回)
  • pushState:使用新路径
  • popState:路径的回退
  • go:向前或向后改变路径
  • forward:向前改变路径(go(1))
  • back:向后改变路径(go(-1))

路由工作的大致过程

image.png

在模块化工程中使用它(因为是一个插件, 所以可以通过Vue.use()来安装路由功能)

第一步:导入路由对象,并且调用 Vue.use(VueRouter)
第二步:创建路由实例,并且传入路由映射配置
第三步:在Vue实例中挂载创建的路由实例

在子组件中获取到路由配置信息地址的内容

$route.params.指的是正处在活跃状态的路径信息

<b>{{$route.params.userId}}</b>

vue-router使用步骤

  • 先下载对应的脚手架(记得要下载vue-router)
  • 在components文件夹创建组件文件(.vue文件)
  • 配置路由映射:组件路径之间的关系(router/index.html)
  • 使用路由: 通过<router-link>(自动渲染成a标签)和<router-view>(App.vue模板)
  • 在main.js里面进行使用,注意一定要导出的名字是 router
import router from './router/router.js'
new Vue({
  router,
  render: (h) => h(App),
}).$mount('#app')

浏览器url得知路径模式 ----哈希模式转化为history模式

image.png

router-link补充

image.png
  • 点击按钮的时候。会为该DOM元素增加一个类router-link-active
    可以将该类名修改
  // 将路由导入到vue实例当中
export default new Router({
  //配置组件和路由之间的关系
  routes: routers,
  mode: 'history',
  //修改点击之后增加的类名
  linkActiveClass: 'active'
})

懒加载

  • 由于打包构建应用的时候,打包之后js文件会变得很大,如果一次性从服务器上面请求这些数据的话,会有点慢,甚至电脑上面还出现短暂的空白,所以我们要用到懒加载
  • 懒加载的作用:将路由对应的组件打包成一个个对应的模块,当路由访问到其中的组建的时候,才回去加载对应的模块
  • 懒加载操作
  1. ES6方法 const Home = () => import('../components/Home.vue')
  2. AMD写法:const About = resolve => require(['../components/About.vue'], resolve);
  3. 结合Vue的异步组件和Webpack的代码分析:const Home = resolve => { require.ensure(['../components/Home.vue'], () => { resolve(require('../components/Home.vue')) })};
    打包之后是:
    image.png

打包之后的文件命名问题

const routes = [{ path: "/", redirect: "/home" },
  {
    path: "/home",
    component: () =>
      import ( /*webpackChunkName:"home-chunk"*/ "../package/Home.vue")
  },
  {
    path: "/about",
    component: () =>
      import ( /*webpackChunkName:"about-chunk"*/ "../package/About.vue")
  }
];
image.png
  • 错误页面
    设置,最后有*号表示会把路径按照‘/'划分成数组
{
    path: "/:pathMatch(.*)*",
    component: () =>
      import ( /*webpackChunkName:"about-chunk"*/ "../package/NotFound.vue")
  }

使用

<p>{{$route.params.pathMatch}}</p>

路由嵌套

image.png
  • 实现方法
  1. 先写出两个组件文件
  2. 将其导入到路由配置文件当中进行配置
{
            //父组件
      path: '/home',
      component: Home,
      //定义子路由
      children: [{
     //默认进入的路径
        path: '',
        redirect: 'message'
      }, {
        path: 'message',
        component: Message
      }, {
        path: 'news',
        component: News
      }]
    }
  • 在父组件当中展示
<template>
  <div>
<p>我是首页组件</p>
<router-link to="/home/news">新闻</router-link>
<router-link to="/home/message">消息</router-link>
<router-view></router-view>
  </div>
</template>

传递参数

  • 先生成一个组件
  • 在路由配置文件中进行配置
  • 将其展示出来,并配置路径
    ?query(通过&进行拼接)
<router-link :to="{path:'/info',query:{name:'guo',age:18,hight:188}}" tag="button">关于</router-link>

$route$router的区别

  • $route,在子组件中使用,获取到的是正处于活跃状态的vue组件的路由配置信息
<p>{{$route.query}}</p>
  • router方法:



    可以传入一个对象
image.png
image.png
  • $router为VueRouter实例,可以要导航到不同URL
homeClick(){
            this.$router.push('/home')
            console.log('homeclick');
        }
image.png

在setup()获取route和router的方法

image.png

变量是自定义的

router-link的v-slot


image.png

router-view的slot

动态添加路由

image.png

删除路由

image.png

导航守卫

vue-router提供了beforeEach和afterEach的钩子函数, 它们会在路由即将改变前和改变后触发

  • 类似的钩子函数还有create(),当初始化一个vue实例的时候,自动调用该函数
  • 参数解析导航钩子的三个参数解析:
    to: 即将要进入的目标的路由对象.
    from: 当前导航即将要离开的路由对象.
    next: 调用该方法后, 才能进入下一个钩子.
  • 路由对象


    image.png
  • to:即将进入的路由Route对象;
  • from:即将离开的路由Route对象;
  • next不常用
 //router是vue的实例
router.beforeEach((to, from, next) => {
  console.log(to);
  //matched[0]表示路由嵌套的父路由
  console.log(to.matched[0].meta.title);
  document.title = to.matched[0].meta.title
    //表示继续执行下一步
  next()
})
返回值

keep-alive 是 Vue 内置的一个组件,可以使被包含的组件保留状态,或避免重新渲染

<keep-alive exclude="message,User">
    <!-- exclude属性里面包含的是组建的name属性,且之间不能有空格,表示的是,只要里面包含的组件都不会背缓存 -->
        <router-view></router-view>
</keep-alive>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,884评论 6 513
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,212评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 167,351评论 0 360
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,412评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,438评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,127评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,714评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,636评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,173评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,264评论 3 339
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,402评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,073评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,763评论 3 332
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,253评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,382评论 1 271
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,749评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,403评论 2 358

推荐阅读更多精彩内容

  • 前言 Vue 是一个渐进式的框架,这意味着你可以只使用 Vue 的核心库来开发,但是当你在开发一个完整的业务项目时...
    心_c2a2阅读 1,455评论 0 5
  • 前端路由 Vue-Router 介绍 什么是路由? 路由(routing)就是通过互联的网络把信息从源地址传输到目...
    coderlion阅读 1,682评论 0 0
  • 什么是路由? 网络页面与页面跳转,实现的都是 标签, 标签里面有属性href,给它定义一个网络地址或者路径的...
    廖马儿阅读 2,638评论 1 17
  • Vue-router认识路由前端渲染与后端渲染url的hash和HTML5的historyvue-router的基...
    debug_LX阅读 307评论 0 0
  • 一、什么是路由? 路由是通过互联的网络把信息从源地址传输到目的地址的活动 路由中有个非常重要的概念叫路由表,本质上...
    接下来的冬天阅读 411评论 0 0