1. 路由传参:

  • 编程式的导航 router.push

    this.$router.push("home");
    this.$router.push({ name: 'news', params: { userId: 123 }}) // 传递
    this.$route.params.userId // 获取
    this.$router.push({path: '/transport/dispatch', query: {paicheNo: obj.paicheNo}}) // 传递
    this.$route.query.paicheNo // 获取
  • 声明式的导航 一样

     <router-link
    tag="li" // 渲染为 li标签 默认是 a标签
    :to="{name:'city',query:{id:item.id},params:{cityName:item.name}}">
    {{item.name}}
    </router-link>
  • 总结 :

  • name方式 可以用 query 和 params

  • path方式 只能用 query

  • 命名路由搭配 params,刷新页面参数会丢失

  • 查询参数搭配query,刷新页面数据不会丢失**

2. 关于 hash 和 history 模式的区别

  • hash模式url带#号 兼容性好,history模式不带#号 是h5的新API
  • history模式的优势
    • 没有# url比较规范 用户看着舒服
    • 我们用vue 或者 react做的页面 分享到其他的app中 但是app中不允许 url 中带有 #
    • 注意 : history 不怕前进 不怕后退 怕刷新 在访问了二级页面的时候 做刷新操作 就会出现 404 需要后端配置下 apache或者nginx的url重定向 定向到我们的首页
  • history 模式的原理
    • H5新推出的两个神器:pushState与replaceState
    • 作用就是将url替换且不刷新,好比挂羊头卖狗肉,http并没有去请求服务器该路径下的资源,一旦刷新就会暴露这个实际不存在的“羊头”,显示404。
    • 如何解决404弊端,这就需要服务器端做点手脚,将不存在的路径请求重定向到入口文件(index.html)
  • hash 模式原理
    • window是可以监听到哈希值的变化的(onhashchage事件),这就意味着:当url中的哈希值发生了变化,无需发起http请求,window也可以监听到这种变化,并按需加载前端的代码块
  • 最后补充
    • history 模式下 build之后在本地打开index.html是无效的 hash模式则可以打开

3. 命名视图

  • 要实现同级展示多个视图 而不是嵌套的关系 就需要命名视图了

    • 一个组件中准备了三个出口
      <router-view class="view one"></router-view>
      <router-view class="view two" name="a"></router-view>
      <router-view class="view three" name="b"></router-view>
    • 对于同一个路由 一个视图出口需要一个组件渲染 三个出口就需要三个 下边是具体的配置 注意 components (此时是要加s的)
      const router = new VueRouter({
      routes: [
      {
      path: '/',
      components: {
      default: Foo,
      a: Bar,
      b: Baz
      }
      }
      ]
      })

4. 重定向

  • 重定向也是通过routes 配置来完成的 下边的例子是从 /a 重定向到 /b
    const router = new VueRouter({
    routes: [
    {path: '/a', redirect: '/b'}
    ]
    })
  • 重定向的目标也可以是一个命名的路由
    const router = new VueRouter({
    routes: [
    {path: '/a', redirect: {name: 'foo'}}
    ]
    })
  • 甚至是一个 function 动态的return从定向的目标
    const router = new VueRouter({
    routes: [
    {path: '/a', redirect: to => {
    // 方法接收目标路由作为参数
    // return 重定向饿 字符串路径或路径对象都可以
    }}
    ]
    })

5. 别名

  • “重定向”的意思是,当用户访问 /a时,URL 将会被替换成 /b,然后匹配路由为 /b
  • “别名”的意思是, 当用户访问 /a时,URL 将会被替换成 /b,然后匹配路由为 /a
const router = new VueRouter({
routes: [
{path: '/a', component: Foo, alias: '/b'}
]
})

6. 路由守卫

1. 完整的导航解析流程

  • 导航被触发了
  • 在失活的组件中调用离开守卫 (beforeRouteLeave)
  • 调用全局的 beforeEach 守卫
  • 在重用的组件中调用 beforeRouterUpdate 守卫(2.2+)
  • 在路由配置中调用 beforeEnter
  • 解析异步路由组件
  • 在被激活的组件里调用 beforeRouterEnter
  • 调用全局的 beforeResolve 守卫(2.5+)
  • 导航被确认
  • 调用全局的 afterEach 钩子
  • 触发 DOM 更新
  • 用创建好的实例调用 beforeRouterEnter 守卫中传递给 next 的回调函数

2. 三种守卫(全局的守卫, 路由独享的守卫, 组件内的守卫)的具体配置

  • 全局前置守卫
    const router = new VueRouter({....})
    router.beforEach((to, from, next) => {
    // to 即将进入的目标路由对象
    // from 当前导航正要离开的 路由对象
    // next 是一个 function 必须要调用一下 next()
    })
  • 全局解析守卫
    router.beforeResolve((to, from) => {
    //
    })
  • 全局后置守卫
    router.afterEach((to, from) => {
    // 此时没有了 next 函数
    })
  • 路由独享的守卫
    const router = new VueRouter({
    routes: [
    {
    path: 'foo',
    component: Foo,
    beforeEnter: (to, from, next) => { }
    }
    ]
    })
  • 组件内的守卫 (定义的位置和组件的生命周期平级)
    const Foo = {
    template: `...`, beforeRouterEnter (to, from, next) {
    // 在组件的对应路由被 confirm 前调用
    // 不能获取 组件的 this 因为当此守卫执行时 组件实例还没有创建 下方法可以访问组件实例
    next(vm => {
    // 通过 vm 访问组件的实例
    })
    }, beforeRouterUpdate (to, from, next) {
    // 当前路由改变 但是该组件被复用时 调用
    // 举例来说,对于一个带有动态参数的路径 /foo/:id,在 /foo/1 和 /foo/2 之间跳转的时候,
    // 由于会渲染同样的 Foo 组件,因此组件实例会被复用。而这个钩子就会在这个情况下被调用。
    // 可以访问组件的 this
    }, beforeRouteLeave (to, from, next) {
    // 导航离开该组件的对应路由时调用
    // 可以访问组件实例 `this`
    }
    }

Vue Router 相关的更多相关文章

  1. vue router相关用法

    router.push(location) 想要导航到不同的 URL,则使用 router.push 方法.这个方法会向 history 栈添加一个新的记录,所以,当用户点击浏览器后退按钮时,则回到之 ...

  2. 深入浅出的webpack构建工具--webpack4+vue+router项目架构(十四)

    阅读目录 一:vue-router是什么? 二:vue-router的实现原理 三:vue-router使用及代码配置 四:理解vue设置路由导航的两种方法. 五:理解动态路由和命名视图 六:理解嵌套 ...

  3. python 全栈开发,Day91(Vue实例的生命周期,组件间通信之中央事件总线bus,Vue Router,vue-cli 工具)

    昨日内容回顾 0. 组件注意事项!!! data属性必须是一个函数! 1. 注册全局组件 Vue.component('组件名',{ template: `` }) var app = new Vue ...

  4. Vue Router的入门以及简单使用

    Vue Router 是Vue官方的路由管理器,是Vue用来实现SPA的插件.它和 Vue.js 的核心深度集成,让构建单页面应用(SPA)变得易如反掌. 基本概念: 路由:是一种映射关系,是 “pa ...

  5. [Vue 牛刀小试]:第十四章 - 编程式导航与实现组件与 Vue Router 之间的解耦

    一.前言 在上一章的学习中,通过举例说明,我们了解了 Vue Router 中命名路由.命名视图的使用方法,以及如何通过 query 查询参数传参,或者是采用 param 传参的方式实现路由间的参数传 ...

  6. vue Router——进阶篇

    vue Router--基础篇 1.导航守卫 正如其名,vue-router 提供的导航守卫主要用来通过跳转或取消的方式守卫导航.有多种机会植入路由导航过程中:全局的, 单个路由独享的, 或者组件级的 ...

  7. 「vue基础」一篇浅显易懂的 Vue 路由使用指南( Vue Router 上)

    大家好,今天的内容,我将和大家一起聊聊 Vue 路由相关的知识,如果你以前做过服务端相关的开发,那你一定会对程序的URL结构有所了解,我没记错的话也是路由映射的概念,需要进行配置. 其实前端这些框架的 ...

  8. 04 Vue Router路由管理器

    路由的基本概念与原理 Vue Router Vue Router (官网: https://router.vuejs.org/zh/)是Vue.js 官方的路由管理器. 它和vue.js的核心深度集成 ...

  9. Vue 2.0 + Vue Router + Vuex

    用 Vue.js 2.x 与相配套的 Vue Router.Vuex 搭建了一个最基本的后台管理系统的骨架. 当然先要安装 node.js(包括了 npm).vue-cli 项目结构如图所示: ass ...

随机推荐

  1. C++中无数据成员的类的对象占用内存大小

    结论: 对于没有数据成员的对象,其内存单元也不是0,c++用一个内存单元来表示这个实例对象的存在. 如果有了数据或虚函数(虚析构函数),则相应的内存替代1标记自己的存在. PS:以下代码均在win32 ...

  2. 阿里云提供全托管 ZooKeeper

    自 2010 年左右第一次引入以来,Apache ZooKeeper 目前在阿里巴巴集团内部已经有了将近 10 年的发展,使用的场景非常广泛,基于 ZooKeeper 强一致性的特点,被用在了分布式锁 ...

  3. 释放内存触发断点及数组、指针的NULL初始化

    Visual Studio调试时,出现“触发一个断点”内存释放出现异常 数组和对应指针的NULL初始化 数组使用之前要先对其初始化 char Outi[4] = { NULL }; char Outj ...

  4. 【linux之路】常用的命令

    用bash插入代码 1.查看ubuntu的版本号 lsb_release –a //linux标准基础(Linux Standards Base):release发布 2.查看Ubuntu的内核 un ...

  5. jeecms v9导入myeclipse 2015 ehcache.xml报错问题

    1.找不到ehcache.xml文件问题 cache-context.xml <property name="configLocation"> <value> ...

  6. jeecms系统_自定义对象流程

    库内新增对象Products 的流程说明: 第一步: com.jeecms.cms.entity.assist.base下建立模型基础类,BaseCmsProducts.java com.jeecms ...

  7. python实现简单的百度翻译

    这段时间,一直在学python,想找点东西实现一下,练手,所以我想通过python代码来实现翻译,话不多说,看吧! 以chrome为例 1  打开百度翻译 https://fanyi.baidu.co ...

  8. 原型模式(Prototype)(对象、克隆广告邮件)

    有些对象创建过程较为复杂,而且有些时候需要频繁的创建,原型模式通过给出一个原型对象来指明所要创建的对象的类型,然后复制这个原型对象的方法创建更多同类型的对象.这就是原型模式的动机. 原型模式的主要思想 ...

  9. xshell下载免费版

    正在使用的xshell 5不能使用,提示xshell 5评估期已过,重新安装还是不行.其实xshell 5有免费版的,即Home & school 版本.卸载原程序,下载安装免费版本的xshe ...

  10. Codeforces 360A(找性质)

    反思 写一写可以发现上限不断更新 一直在想怎么判断NO,刻板拘泥于错误的模型,想要像往常一样贪心地.读入当前值就能判断会不会NO,实际上只要构造完以后,最后把所有操作重新跑一遍看会不会冲突即可判断NO ...