路由的一些小记录

133 阅读2分钟

route和router

  • 注册完路由,不管是路由组件还是非路由组件身上都有routeroute、router属性
  • $route一般获取路由信息【路径、query、params等等】
  • $router一般进行编程式导航进行路由跳转【push/replace】

router文件

在src文件下创建一个router文件,包含index.js用来配置路由 {E2D974D5-EFA6-BAB5-D305-76A62DB27C16}.jpg

App.vue

要配置路由组件出口 {2C5FB3F8-E2CD-53E6-E5FD-E4DDDA0BA93C}.jpg 在配置路由时,可以给路由添加路由元信息meta。 {C8A93C20-D83E-AB4A-BCFE-641ACD2CAA22}.jpg {B163CAC8-7D14-4DBF-AD32-B7647E33A34A}.jpg {4B15E2D1-0CCA-DB7C-E71A-9D4C3B75B9EE}.jpg

main.js

引入注册路由 {71B0216D-16C0-BCD8-45B9-3C15791BB50C}.jpg

路由跳转与传参

路由的跳转

声明式导航

router-link,可以进行路由的跳转 {24152326-6D33-4BEA-8401-0DB6E0DFECC9}.jpg

编程式导航

push|replace,可以进行路由跳转 {7B8413FB-0615-6E05-A232-E1AE99066DD4}.jpg {0652403A-1A54-107E-B96D-526EEDBCEE95}.jpg

选择

编程式导航:声明式导航能做的,编程式导航都能做。除此之外,编程式导航还可以做一些业务逻辑。

路由传参

参数的写法:

  • params参数:属于路径中的一部分,在配置路由的时候,需要占位
  • query参数:不属于路径中的一部分,类似于Ajax中的queryString /home?k=v&kv=,不需要占位 {E1E72AF6-ABBA-6946-EB22-0B1E3B568F1D}.jpg
    一般使用对象形式 {287E0E1C-C9C4-1150-1223-344D8DC3AA00}.jpg

几个问题

  • 1.路由传递参数(对象写法)path是否可以结合params参数一起使用?
  • 答:不可以。对象的写法可以是name、path形式

  • 2.如何指定params参数可传可不传?
  • 如果路由要求传递params参数,但是你就不传递,URL就会有问题。可以在占位的后面加一个问号代表params可以传递或者不传递 {A1177864-A50C-6094-28DE-FB07E07C4249}.jpg

  • 3.路由参数传递的是空串,如何解决?
  • 使用undefined解决 {3F74A82C-77D9-78C7-70E7-6B990943BAE1}.jpg

  • 4.路由组件能不能传递props?
  • 可以。有三种写法: {F083B702-0BD5-93DD-0D81-D2FEE2DC022B}.jpg {47C40DA3-C59F-E056-5D69-B391BACEA7FF}.jpg

  • 5.编程式路由跳转到当前路由(参数不变),多次执行会抛出错误?
  • 声明式导航没有这类问题,因为vue-router底层已经处理好了。因为最新的vue-router引入了promise。通过给push方法写入相应的成功和失败的回调函数,但是治标不治本。

治标 {16C6C925-2BFC-1CA7-E657-859E36235800}.jpg 治本 {C1F5256E-D9F8-7B7A-8547-A381B6BDFE6B}.jpg