• Vue学习(二十三)路由全攻略


    路由对象

    this.$route:访问当前路由

    this.$route.name:获取当前路由名称

    this.$route.hash:获取当前路由hash值(带#),如果没有hash值则为空字符串

    this.$route.params:获取路由中配置的动态路径参数

    this.$route.params.pathMatch:在路由中使用通配符(*)时,获取 URL 通过通配符被匹配的部分

    this.$route.query:获取URL中的参数

    this.$route.meta:没有嵌套路由的情况下获取路由元信息中的数据,meta 数据并不是只读的,我们可以在代码中根据需求动态地改变它

    this.$route.matched:一个数组,包含当前路由的所有嵌套路径片段的路由记录 。路由记录就是 routes 配置数组中的对象副本 (还有在 children 数组)

    监听路由对象 

    watch: {
        // 如果路由有变化,会再次执行该方法
        '$route': 'fetchData'
      },
      methods: {
        fetchData () {
          this.error = this.post = null
          this.loading = true
          // replace getPost with your data fetching util / API wrapper
          getPost(this.$route.params.id, (err, post) => {
            this.loading = false
            if (err) {
              this.error = err.toString()
            } else {
              this.post = post
            }
          })
        }
      }

    或者

    const User = {
      template: '...',
      watch: {
        $route(to, from) {
          // 对路由变化作出响应...
        }
      }
    }

    或者

    // watch $route 决定使用哪种过渡
    watch: {
      '$route' (to, from) {
        const toDepth = to.path.split('/').length
        const fromDepth = from.path.split('/').length
        this.transitionName = toDepth < fromDepth ? 'slide-right' : 'slide-left'
      }
    }

    参考:

    this.$route.params和this.$route.query的区别

    路由元信息:

    Vue.js - 路由 vue-router 的使用详解4(没有嵌套路由时获取路由元信息meta)

    vue-router官网:路由元信息

    vue-router官网api:路由对象(有嵌套路由时获取路由元信息)

    编程式导航

    this.$router:访问路由器(路由实例)

    this.$router.push(location, onComplete?, onAbort?):导航到不同的URL,会向history栈添加一条记录

    this.$router.replace(location, onComplete?, onAbort?):导航到不同的URL,不会向history栈添加一条记录

    this.$router.go(n): history 记录中向前或者后退多少步

    this.$router.back():请求(返回)上一个history记录

    this.$router.resolve(location, current?, append?):vue中在新窗口打开页面可以使用该方法,解析路由可以得到location、router、href等目标路由的信息,得到href就可以使用window.open开新窗口了,传递的location可以参考vue-router官网:编程式的导航

    传参方式 

    1、使用 query

    this.$router.push({
      path: '/home',
      query: {
        site: [],
        bu: []
      }
    })

    2、使用 params

    this.$router.push({
      name: 'Home',  // 路由的名称
         params: {
        site: [],
        bu: []
      }
    })

    params:/router1/:id ,/router1/123,/router1/789 ,这里的id叫做params

    query:/router1?id=123 ,/router1?id=456 ,这里的id叫做query。

    二者的区别

    1. query 传参配置的是 path,而 params 传参配置的是name,在 params中配置 path 无效

    2. query 在路由配置不需要设置参数,而 params 必须设置

    3. query 传递的参数会显示在地址栏中

    4. params如果不在路由中配置传参刷新会无效,但是 query 会保存传递过来的值,刷新不变 ;

    5. 路由配置:

    query 写法

      {
        path: '/home',
        name: Home,
        component: Home
      }

    params 写法

       {
         path: '/home/:site/:bu',
         name: Home,
         component: Home
        }

    如果路由上面不写参数,也是可以传过去的,但不会在 url 上面显示出你的参数,并且当你跳到别的页面或者刷新页面的时候参数会丢失,那依赖这个参数的 http 请求或者其他操作就会失败

    获取路由参数

    在接收的跳转的页面 :

        created () {
        let self = this
        self.getParams()
        },
        watch () {
        '$route': 'getParams'
        },
        methods: {
          getParams () {
          let site = this.$route.query.site
          let bu = this.$route.query.bu
          // 如果是params 传参,那就是this.$route.params.site 上面就可以获取到传递的参数了
         }
        }

    params一旦设置在路由,params就是路由的一部分,如果这个路由有params传参,但是在跳转的时候没有传这个参数,会导致跳转失败或者页面会没有内容。

    params、query不设置也可以传参,但是params不设置的时候,刷新页面或者返回参数会丢失,query并不会出现这种情况

    参考: 

    vue-router官网:编程式的导航

    vue-router官网api:this.$router.resolve

    this.$router.resolve Vue如何打开新窗口

    声明式导航

    <router-link to='xxx' tag='li'> To PageB </router-link>

    <router-link to='xxx' tag='li' replace> To PageB </router-link>

    注意:<router-link> 会默认解析成 a 标签,可以通过 tag 属性指定它解析成什么标签,点击<router-link to="....">等同于调用router.push(.....),点击<router-link to="...." replace>等同于调用router.replace(.....)

    命名路由

    参考:

    vue-router官网:命名路由

    命名视图

    路由和组件映射:

    • 一个路由对应一个组件

    • 多个路由对应一个组件

    • 一个路由对应多个组件

    命名视图就是解决第三种“一个路由对应多个组件”情况的!!!

    vue-router官网:命名视图

    导航守卫

    导航守卫又称路由守卫,实时监控路由跳转时的过程,在路由跳转的各个过程执行相应的操作,类似于生命周期函数,在开发过程中经常被使用,比如用户点击一个页面,如果未登录就调到登录页面,已登录就让用户正常进入。

    参考:

    vue-router官网:导航守卫

    vue导航守卫详解

    vue-router导航守卫,不懂的来

    路由模式

    history、 hash 和 abstract 

    参考:

    Vue Router history模式的配置方法及其原理

     

  • 相关阅读:
    支付宝自研数据库OceanBase全球开放!淘汰甲骨文
    网易邮箱运维工程师岗位应聘笔试题
    Python中的10个常见安全漏洞及修复方法
    关于数据库性能优化的一些误区
    解密程序员招聘内幕
    JSP---第十次作业
    JSP----第九次作业
    JSP---第八次作业
    JSP---第七次作业
    第六次作业---JDBC连接数据库
  • 原文地址:https://www.cnblogs.com/kunmomo/p/15304654.html
Copyright © 2020-2023  润新知