Vue-router

Vue-router认识路由前端渲染与后端渲染url的hash和HTML5的historyvue-router的基本使用路由的懒加载vue-router嵌套路由Vue-router参数传递Vue-router导航守卫keep-alive

Vue-router

认识路由

  1. 概念

    路由(routing)就是通过互联的网络把信息从源地址传输到目的地址的活动

  2. 路由器提供了两种机制:路由和转送

    1. 路由是决定数据包从来源到目的地的路径

    2. 转送将输入端的数据转移到合适的输出端

  3. 路由表

  4. 路由表本质上就是一个映射表,决定了数据包的指向

前端渲染与后端渲染

  1. 区别

  2. 后端路由

    1. 后端处理URL与页面间的映射关系
  3. 前后端分离

    1. 后端只负责提供数据,不负责任何界面的内容

    2. 前端渲染:浏览器中显示的网页中的大部分内容,都是由前端写的js代码在浏览器中执行,最终渲染出来的网页

    3. 后端只提供 API来返回数据,前端通过Ajax返回数据,通过js将数据渲染到页面中

  4. 单页面富应用(SPA页面)

    1. 在前后端分离基础上,又加上了一层前端路由。区别

    2. 整个网页只有一个html页面

    3. 改变url,但是页面不进行整体的刷新

url的hash和HTML5的history

  1. url的hash

    1. url的hash也就是锚点(#),本质上是改变window.location的href属性

    2. 可以通过直接赋值location.hash来改变href,但是页面不发生刷新

    3.  location.hash = "aaa"
       url变为"localhost:8080/aaa"</pre>
      
  2. HTML5的history模式

    1. pushState
       history.pushState({},'',home)   // localhost:8080/home
       history.pushState({},'',about)   // localhost:8080/about
       history.pushState({},'',mine)   // localhost:8080/mine
       //以上相当于入栈
       history.back() //后退,相当于出栈
       history.forward() //前进,相当于压栈</pre>
      
    2. replaceState(): 替换url,back方法失效

vue-router的基本使用

  1. 安装
   npm install vue-router --save
  1. 使用

    1. 导入路由对象,并且调用Vue.use(VueRouter)

    2. 创建路由实例,并传入路由映射配置

    3. 在Vue实例中挂载创建的路由实例

  2. 配置路由映射关系

    1. 创建路由组件

    2. 配置url和组件的映射关系

    3. 使用路由,通过<router-link> 和 <router-view>

      <router-link to="/home"></router-link>
       <router-link to="/about"></router-link>
       <router-view></router-view></pre>
      
  3. 路由的默认路径

     path: '',
     redirect: '/home'
    }]
    
  4. 默认是hash模式,可以修改成history模式

      routes;
      mode: 'history'
     })
    
  5. router-link的属性

    1. to:由于指定跳转的路径

    2. tag:默认router-link会渲染成a标签,如果想渲染成别的标签,则可以使用此属性

    3. replace:replace不会留下history记录,前进后退无法使用,相当于replaceState()

    4. active-class: 激活的router-link默认会有一个router-link-active的类,如果不想使用默认类,则可以使用这个属性

    5.  //如果修改active-class,如果有多个router-link可能需要多处修改,也可以修改一个地方
       const router = new VueRouter({
        routes;
        mode: 'history',
        linkActiveClass: 'active'
       })
      
  6. 通过代码修改路由 this.$router.push('/home') 可以使用返回前进按钮 this.$router.replace('/home') 前进后退不能用

  7. 动态路由

    export default {
     name: '#app',
     data(){
     return {
     userId: 'zhangsan'
     }
     }
    }
    {
     path: '/user/:userId',
     component: User
    }
    //获取参数
    this.$route.params.userId
    {{$route.params.userId}}
    

路由的懒加载

  1. npm run build后生成3个js文件 app.js manifest.js vender.js

    app.js中是自己写的业务代码

    manifest.js是为了打包的代码做底层支撑

    vender.js中的是使用的第三方包

  2. 为什么要懒加载?

    1. 打包构建应用时,js文件比较大,会影响页面加载

    2. 如果能把不同路由对应的组件分割成不同的代码块,然后当路由被访问的时候才加载对应组件,这样更加高效

  3. 如何进行路由懒加载

    import Home from '@/components/Home'
    import About from '@/components/about'
    Vue.use(VueRouter)
    const routes = [
     {
     path: '/home',
     component: Home
     },
     {
     path: '/about',
     component: About
     }
    ]
    ​
    //使用路由懒加载
    const Home = ()=>import('@/components/Home')
    const About = ()=>import('@/components/About')
    const routes = [
     {
     path: '/home',
     component: Home
     },
     {
     path: 'about',
     component: About
     }
    ]
    

vue-router嵌套路由

  1. 什么是嵌套路由?

    1. 比如在Home页面,希望通过/home/news和/home/message访问一些内容

    2. 一个路径映射一个组件,访问这两个路径也会分别渲染两个组件

  2. 如何实现嵌套路由?

    1. 创建对应的子组件,并在路由映射中配置对应的子路由

    2. 在组件内部使用<router-view>标签

      {
      path: '/home',
      component: Home,
      children: [
      path: 'news',  //前面不要加/
      components: News
      ]
      }
     ]
    

Vue-router参数传递

  1. 传递参数主要有两种类型params和query

    1. params的类型

      1. 配置路由格式:/router/:id

      2. 传递的方式:在path后面跟上对应的值

      3. 传递后形成的路径:/router/123, /router/abc
        <router-link :to="'/profile' + userId"></router-link>

    2. query的类型

      1. 配置路由格式:/router

      2. 传递的方式:对象中使用query的key作为传递方式

      3. 传递后形成的路径:/router?id=123, /router?id=abc

             <h2>{{$route.query.name}}</h2>  //取参
    

Vue-router导航守卫

  1. 什么是导航守卫?

    1. vue-router提供的导航守卫主要用来监听路由的进入和离开

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

  2. 一个小需求,根据路由的变化修改title值

      path: '/home',
      component: Home,
      children: [...],
      meta: {
      title: '首页'
      },
      path: '/about',
      component: About,
      meta: {
      title: '关于
      }
     ]
     ​
     const router = new VueRouter({
      routes,
      mode: 'history',
      linkActiveClass: 'active
     })
     //前置守卫, 必须调用next方法  全局守卫
     router.beforeEach((to, from, next)=>{
      document.title = to.meta.matched[0].title
      next()
     })
     /*
     导航钩子的三个参数:
     to: 即将要进入的目标的路由对象
     from: 当前导航即将要离开的路由对象
     next: 调用该方法后,才能进入下一个钩子 */
     router.afterEach((to, from)=>{})
  1. 除了全局守卫,还有路由守卫和组件内守卫

    1.   const routes = [
         {
         path: '/home',
         component: Home,
         beforeEnter(to, from ,next){
         }
         }
        ]
      

keep-alive

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

    • include- 字符串或正则表达式, 只有包含的组件会被缓存

    • exclude- 字符串或正则表达式, 排除的组件不会被缓存

    •  <keep-alive exclude="User, About">
        <router-view/>
       </keep-alive>
      
  • router-view也是一个组件,如果直接被包含在keep-alive里面,所有路径匹配到的试图组件都会被缓存

  • 只有被keep-alive包围时,actived和deactived方法才会被调用

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

推荐阅读更多精彩内容

  • 1路由,其实就是指向的意思,当我点击页面上的home按钮时,页面中就要显示home的内容,如果点击页面上的abou...
    你好陌生人丶阅读 1,625评论 0 6
  • VueRouter是vue可以渐进引入的路由模块,但是既然已经引入了路由模块,项目已经具备了工程化概念,不妨直接使...
    陈观齐阅读 111评论 0 0
  • 路由,其实就是指向的意思,当我点击页面上的home按钮时,页面中就要显示home的内容,如果点击页面上的about...
    六月太阳花阅读 575评论 0 3
  • 🥝 前端路由的特点: ❤️优点:用户体验好,不需要每次都从服务器全部获取,可以快速展现给用户。💔缺点:👋 不利于S...
    我的天气很好啦阅读 8,150评论 0 5
  • vue-router 基本使用Vue Router 官方网介绍 路由,其实就是指向的意思,当我点击页面上的home...
    雄关漫道从头越阅读 2,215评论 0 0