vue路由router,routes,route

vue路由router,routes,route,第1张

SEO:搜索引擎优化,

前端路由:控制页面访问路径,单页面应用

后端路由:控制接口

1,URL的hash,locationhash

2,HTML5的history模式,historypushState(data,title,url)

使用vue create '文件名',创建一个vue脚手架,

vueuse(VueRouter),调用vue-router这个对象上面的install方法,注册两个属性在vue原型对象上,分别是vueprototype$router(整个项目的路由对象)和vueprototype$route(当前活跃的路由对象)

实例化一个VueRouter对象

router-link相当于a标签,跳转页面。router-view相当于一个占位符,把现在页面访问的路径内容加载进来,替换掉router-view

vueRouter跳转页面的方式有用this$routerpush('/home'),this$routerreplace()和用标签<router-lin>

this$routerpush('/homekey='+vaule+'&key1='+vaule1)。在另一个页面用this$routequery获取传过来的值

第一种

组件中:通过路由属性中的name来确定匹配的路由,通过params来传递参数。

接收参数

第二种

父组件:使用path来匹配路由,然后通过query来传递参数

这种情况下 query传递的参数会显示在url后面id=?

接收参数都是一样

第三种

在路由规则里定义如下

pid是一个变量,在用这个动态路由的时候可以

懒加载是当你点击一个页面时,先缓存所有的链接,不执行,只执行那个页面的资源,这样可以提升效率,提高响应速度。

路由懒加载很简单,在component用import引入组件,如下:

router相当于一个路由器,路由器里面有路由表,既routes,表中很多路由规则,route是routes的一个个路由规则

路由允许我们通过不同的URL去访问不同的内容,该URL可以是我们自己设置的,在项目中并没有这样的文件夹,这种功能就是路由

路由的本质是hash值

定:定义路由组件

配:配置路由

实:实例化路由

挂:挂载路由

路由(vue-router)的基本作用就是将每个路径映射到对应的组件,通过修改路由进行组件之间的转换

常规路径规则为在当前路径后面加上"/path",path即为设定的前端路由路径

  跳转到上一次的页面:this$routergo(-1);

  指定跳转的地址:this$routerreplace("/path");

  指定跳转的路由名字下:this$routerreplace({name:"menuLink"});

  通过push进行跳转:this$routerpush("/path");

  或this$routerpush({name:"path"});

  (1)设置一个默认展示组件,(不推荐!!!)

        {path:"/",component:login}

    (2) 路由redirect重定向,设置默认组件

        {path:"/",redirect:"login"}

  (1)创建一个路由对象,当导入vue-router包之后,在window全局对象之中就有一个路由的构造函数VueRouter

  (2)在new路由对象的时候可以传递一个配置对象,这个配置对象的route表示路由器的匹配规则

  (3)每个路由规则都是一个对象,这个规则对象身上必须有两个属性

        属性1:path表示监听那个路由的链接地址

属性2:component表示如果路由是前面匹配到的path,则展示component属性对应的组件,

      component属性值必须是一个组件模板对象,不能是组件的引用名称

  (4)router:routerObj将路由规则对象,注册到VM实例上,用来监听URL地址的变化,然后展示对应的组件

  (5)使用vue官方提供的router-link元素使用它,默认渲染成一个a标签,<router-link to="login">登录</router-link>

  (6)在控制的div中(AppVue)使用<router-view></router-view>

1问题描述

页面中需要路由匹配给当前路由高亮,所以就需要获取当前路由的path,但是发现获取不到

在 mounted 中打印 $route:

获取到的值不对。path 和 fullPath ,明明应该有值,但只有一个 "/" 。

可能在 mounted 中router 的初始化还没有完成,所以取到的是一个初始默认值。

加一个延时试试:

可以发现,有时能获取到,有时获取不到,延时到2000以后,目前测试的是都能获取到。

问题推测:

vue-router 初始化是需要一段时间的,在完成之前,取值只能拿到初始的默认值。

在 mounted 中 router 初始化可能还没有完成。

2用onReady解决

上面用定时器延迟了1000ms,有时能取到 router,于是加长延时时间到2000解决,但是,真正要解决这个问题,肯定不能用定时器,因为延迟的时间无法确定:

长了,影响体验

短了,可能router初始化还没完成

查阅官网API,希望官方提供了 初始化完成时的回调方法 ,果然找到了: onReady

经测试,通过。

replace和push区别:

routerpush(location) 会向 history 栈添加一个新的记录,当用户点击浏览器后退按钮时,则回到之前的 URL。

routerreplace(location) ,replace 属性(默认值: false),它不会向 history 添加新记录,而是跟它的方法名一样 —— 替换掉当前的 history 记录。

注意:获取路由上面的参数,用的是$route,后面没有r

params是路由的一部分,必须要有。query是拼接在url后面的参数,没有也没关系。

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

params、query不设置也可以传参,但是params不设置的时候,刷新页面或者返回参数会丢失。

两者都可以传递参数,区别是什么?

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

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

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

params传参刷新会无效,但是query会保存传递过来的值,刷新不变

以上就是关于vue路由router,routes,route全部的内容,包括:vue路由router,routes,route、Vue路由的使用、vue-router,路由按需加载,页面加载完成后,this.$route 获取不到等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9295471.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-26
下一篇 2023-04-26

发表评论

登录后才能评论

评论列表(0条)

保存