zoukankan      html  css  js  c++  java
  • Vue-路由(router)

    一、路由

      (一)前端路由

        每一个路由都是一个对象

      (二)路由模式:mode

        1、hash路由,会带#号的哈希值(默认)

        2、history路由,不会带#号(要有后端支持),只在开发环境有效,在其他环境中,一旦刷新就会找不到,需要设置重定向

      (三)路由的常用配置项

        1、path:路由请求的路径

        2、component:路由匹配成功后需要渲染的组件或页面

        3、redirect:重定向

        4、children:路由嵌套

        5、name:命名路由

        6、alias:别名设置

        7、props:路由解耦,路由传参的一种方式,针对动态路由

        8、meta:路由元信息

      (四)路由嵌套

        children是一个数组,数组中存放对象,每一个对象都是下一级的路由配置项,配置项的属性与routes中的属性一样

        渲染二级页面时会保留一级页面内容,解决办法:1)定位;2)一级覆盖

      (五)路由跳转的方式

        *<router-view/>内置组件,使组件可以显示

        1、<a href="#/home"><a/>

        2、<router-link :to="/home"><router-link/>

          注:to的路径会与path进行匹配,若成功会通过<router-view>渲染component对应的组件

        3、编程式导航(用JS实现)

          *this.$router.push()跳转

          *this.$router.go()前进、后退、刷新

          *this.$router.back()返回

          *this.$router.forward()前进

          *this.$router.replace()替换(替换浏览记录)

      (六)路由传参

        1、动态路由传值(刷新页面,params数据会丢失,query会使参数显示在路径上,刷新仍在)

          传递:在路由配置项path中传递路由的属性 path:"home/:id/:name"

             在传递方的路由跳转元素的to路径中使用"/"或"{name:' ',params:{}}"拼接方式

          接收:this.$route.params

             在路由配置项中添加"props:true",接收时通过props:{},只针对动态路由传值

        2、query传值(页面刷新时,数据不会丢失)

          传递:路由配置项path中为正常路径,

             在传递方的路由跳转元素的to路径中,通过?进行数据的拼接,每个字段之间用&分隔

          接收:this.$route.query

        注:两者区别:query传值是非必须传值,动态路由传值是必须传值

      (七)路由的钩子函数(路由守卫、路由拦截)写在组件中

        1、beforeRouteEnter:路由进入前(to,from,next)

          在当前钩子函数中是访问不到this的,因为还未进入当前组件所以this为undefined;若要使用this则要在next()中使用回调,回调的第一个参数是组件的实例

          使用场景:热力图,登录验证,权限验证,会员VIP验证,验证商品携带信息是否完整

        2、beforeRouteUpdate:路由更新时

          当路由发生改变时,但当前组件没有经历创建和销毁时,若需要接收路由传递过来的数据时使用

        3、beforeRouteLeave:路由离开的时候

          应用场景:信息没有填写完成,答题系统,支付,退出登录

      (八)全局钩子函数,全局守卫(批量拦截)写在main.js中

        1、beforeEach((to,from,next)=>{}):一般情况下用来做一些路由公众部分的验证(登录验证)

        2、afterEach((to,from)=>{}):后置守卫,注:无next

        3、beforeResolve((to,from,next)=>{}):解析守卫,在进入之后离开之前,当某一个组件单独需要验证使用

      (九)二级页面内容不随一级页面的操作变化,解决方案:

        1、使用beforeRouteUpdate(to,from,next){}

        2、watch:{"$route"(to,from){}}监听

        3、路由传值时使用props接收

      (十)单页面开发缺点/首屏加载慢或白屏如何解决?

        1、方式一:路由懒加载

          *ES6引入方式:component:()=>import "组件路径"

          *异步组件:component:(resolve)=>require(["组件路径"],resolve);

        2、方式二:ssr渲染

          服务端渲染:nuxt

  • 相关阅读:
    卤菜技巧
    JS实现延迟
    软件项目版本号的命名规则及格式
    EF复合主键
    验证码和验证控件
    还原数据库,数据库提示正在还原中的处理办法
    更新汇总行
    centOS7挂在windows移动硬盘方法
    关于this、Echarts中的data
    SQLServer 查看SQL语句的执行时间
  • 原文地址:https://www.cnblogs.com/liufuyuan/p/10777598.html
Copyright © 2011-2022 走看看