router-view将显示与url对应的组件吗?

在使用vue-router的项目中,实例化VueRouter是其配置选项routes该选项指定路由与视图的组件的关系或者路由与其他路由的关系,Router配置选项中是其中最重要的配置。

 
 

注意Vue的router支持动态路径,以 "/:属性名"形式作为当前path字符串中的一部分。这段字符串路由将作为动态路由匹配真实url上响应字符串信息

 
/* 当我们跳转至上面的路由时其对应的路由视图组件User内部就可以通过
 

注意this.$route就是当前vue应用程序所在路由的信息对象


  

当前浏览器url与路由的path匹配时所渲染的路由组件

 // 动态路径匹配 通过:id获取每一首歌不同的id
 // 路由的懒加载,通过函数的形式,可以让项目中哪些不许一开始就要加载的组件,加载到项目中去
 // 只有浏览器跳转到当前路由时,该路由组件才会加载到项目中去
 // 这样做的好处是减少不必要的加载降低应用加载速度和运行带宽
 

注意在项目开发中应用中不需要一开始就加载的路由组件请使用懒加载

给路由命名,让路由成为具名路由。路由的导航就可以使用name进行跳转。(路由使用location导航时只有具名路由可可以直接接受pramas传参)


  

重定向路由,当前应用访问导航至该路由时,这个路由会(以替换的形式)自动重定向到redirect指定的新路由

 redirect 支持函数的形式,该函数接收一个参数就是个访问oldpath时生成的location对象

路由的动态匹配一般情况下只能通过,this.$route.params获取动态匹配到的值。当设置props属性后动态匹配到的键值对可以作为组件props直接传递给视图组件,这样大大降低组件的耦合性

 // 动态路径匹配 通过:id获取每一首歌不同的id
 props: ["id"], // 路由动态路径匹配到的键值对会自动传递给当前组件的同名props
 //真实开发中这里要判断数据是否请求成功
 // 把歌曲的数据赋值给data
 

对象props对象形式,就是将对象key作为渲染组件props属性名,value就是对应属性值 (这种写法value不会改变所以传递props都是一些静态属性)


  

函数props的函数写法接收当前路由信息对象作为参数,该函数会返回一个对象.对象的key就是渲染组件props属性名,value就是对应属性值


  

路由的别名,可以给一个路由设置多个路径。当访问这些别名路径时都会访问同一个路由组件


  

嵌套路由,可以给当前路由设置二级路由


  

路由的独享守卫,当应用将要导航到当前路由时,可以使用该守卫进行一些逻辑运算实现是否阻止本次导航

注意router是路由实例对象里面包含着路由的属性方法,router是路由实例对象里面包含着路由的属性方法, router是路由实例对象里面包含着路由的属性方法,route是当前浏览访问url路由信心对象

编程式导航到指定的路由

 

编程式替换当前路由导航到新路由

 

编程式从当前路由history栈的位置前进后退number条

 

注意当前进/后退的number大于实例路由history栈的长度时,会前进到最后一条或后退到第一条,但是不推荐这样做会引起性能问题造成页面卡顿

编程式从当前路由history栈的位置后退1条


  

编程式从当前路由history栈的位置前进1条


  

用vue.js写单页面应用时,会出现打包后的JavaScript包非常大,影响页面加载,我们可以利用路由的懒加载去优化这个问题,当我们用到某个路由后,才去加载对应的组件,这样就会更加高效

先引入了组件,事先加载好了。然后不管有没有使用都已经存在


  

只有路由被使用到了才进行加载对应的组件

 

history ―― 利用了 HTML5 History Interface 中新增的 pushState() 和 replaceState() 方法。(需要特定浏览器支持)这两个方法应用于浏览器的历史记录栈,在当前已有的 back、forward、go 的基础之上(方法可在Router的实例方法中查看),它们提供了对历史记录进行修改的功能。只是当它们执行修改时,虽然改变了当前的 URL,但浏览器不会立即向后端发送请求。

在使用vue-router开发的项目中,一般情况下不同路由之间的切换会将离开的路由组件卸载,进入的路由组件挂载。
这种情况下我们可通过vue的声明周期进行一些页面的逻辑操作。但是如果有些情况下应用为提高用户体验减少卸载频率或者保存离开组件的活跃性,使用keep-alive组件包裹router-view后路由的切换就把会卸载离开的组件了。这时,如果你的组件需要在路由进入或离开时进行一些操作修改组件自身的数据DOM编程等,就不能再依靠vue的生命周期了。这种情况下请使用组件内的路由守卫。

 // 在渲染该组件的对应路由被 confirm 前调用
 // 因为当守卫执行前,组件实例还没被创建
 // 在当前路由改变,但是该组件被复用时调用
 // 举例来说,对于一个带有动态参数的路径 /foo/:id,在 /foo/1 和 /foo/2 之间跳转的时候,
 // 由于会渲染同样的 Foo 组件,因此组件实例会被复用。而这个钩子就会在这个情况下被调用。
 // 导航离开该组件的对应路由时调用
 

注意组件独享的路由守卫方法都包含三个参数 to from next

// 该回调函数接收当前路由组件实例对象作为参数,我们可以通过该参数操作当前组件
 //真实开发中这里要判断数据是否请求成功
 // 把歌曲的数据赋值给data
 

在使用vue-router开发的项目中,一般情况下不同路由之间的切换会将离开的路由组件卸载,进入的路由组件挂载。
这种情况下我们可通过vue的声明周期进行一些页面的逻辑操作。但是如果有些情况下应用为提高用户体验减少卸载频率或者保存离开组件的活跃性,使用keep-alive组件包裹router-view后路由的切换就吧会卸载离开的组件了这时,如果你的组件需要在路由进入或离开时进行一些操作不需要修改组件自身的状态只是判断是否允许本次路由的跳转等。这种情况下请使用路由独享守卫。


  

案例 登录验证 路由独享守卫配置

 // 因为这个守卫没有任何DOM操作或者对组件自身状态进行读写
 // 这样的守卫就可以作为路由独享守卫
 // 这里吗没有this, next接收一个回调函数,在回调函数中跳转
 // 下面的写法进入了个人页面,又从个人页面重定向到登录,这样可能会造成一些不必要的bug

全局路由守卫,当应用中有多个路由都需要进行相同逻辑的路由守卫判断时,并且该逻辑操作中不需要直接操作组件DOM或组件组件的状态这是就可以使用全局路由守卫(全局守卫最常见的应用就是登陆验证)

// 路由的全局守卫所有的路由跳转,都会调用该守卫
// 全局路由守卫也是Vue router应用中,最适合做登录验证的地方
 // 因为这个守卫没有任何DOM操作或者对组件自身状态进行读写
 // 这样的守卫就可以作为路由独享守卫
 // 这里吗没有this, next接收一个回调函数,在回调函数中跳转
 // 下面的写法进入了个人页面,又从个人页面重定向到登录,这样可能会造成一些不必要的bug

到此这篇关于Vue-Router的routes配置详解的文章就介绍到这了,更多相关Vue-Router routes配置内容请搜索云海天教程以前的文章或继续浏览下面的相关文章希望大家以后多多支持云海天教程!

后端路由: 请求方式、请求地址与 function 处理函数之间的对应关系

  • 导入需要使用路由控制的组件
  • 在 main.js 中导入并挂载路由模块

导入需要使用路由控制的组件

在 main.js 中导入并挂载路由模块

用户在访问地址 A 的时候,强制用户跳转到地址 C ,从而展示特定的组件页面。

通过路由规则的 redirect 属性,指定一个新的路由地址,可以很方便地设置路由的重定向:

自定义路由高亮的 class 类

通过路由实现组件的嵌套展示

  • 声明子路由链接和子路由占位符

在 router.js 路由模块中,导入需要的组件,并使用 children 属性声明子路由规则。

注意:声明子路由时不要加/

把 Hash 地址中可变的部分定义为参数项,从而提高路由规则的复用性。在 vue-router 中

使用英文的冒号(:)来定义路由的参数项。

使用 props 接收路由参数

//可在Movie组件中,以props的形式接收到路由规则匹配的参数项
 
 
通过调用 API 实现导航的方式,叫做编程式导航。与之对应的,通过点击链接实现导航的方式,叫做声明式导航。
 

 
命名路由的 name 值不能重复,必须保证唯一性!
命名路由实现声明式导航
命名路由实现编程式导航
 
全局导航守卫会拦截每个路由规则,从而对每个路由进行访问权限的控制。 //每次拦截到路由的请求都会用fn处理
全局导航守卫的守卫方法中接收 3 个形参 //from当前导航要离开时的路由对象
  • 守卫方法中如果不声明 next 形参,则默认允许用户访问每一个路由
  • 守卫方法中如果声明了 next 形参,则必须调用 next() 函数,否则不允许用户访问任何一个路由
 
next函数的3种调用方式
 
结合 token 控制后台主页的访问权限

  左边是菜单区域,点击菜单栏的【产品】,右边内容区上面显示产品列表,点击某个产品名称下面显示产品详情。

  emmmm,忽然想一想这个需求造的有点鸡肋,可是也是为了从一个问题出发好去理解接下来的内容

  仔细想想,大体的思路以下:

  1.菜单是公共内容,咱们放入App.vue组件中实现逻辑和页面布局,点击菜单栏的菜单名称使用<router-link>和<router-view>去显示产品列表。

  3.产品详情须要新建组件:ProductDetail.vue组件。该组件中,展现相应的产品详情。

  前面两篇VueRouter文章中的主要知识点就是url映射组件和动态路由,接下来咱们结合前两篇VueRouter文章的知识点,按照这个思路去实现需求。

  感受已经摩拳擦掌火烧眉毛想去实现这个小需求了 let's go go go

  App组件主要就是三点:

    1.循环数据menuList展现菜单列表,而且每一个菜单须要使用<router-link>添加连接

    3.菜单的布局:使用fiex定位将菜单固定在浏览器左边,同时设置top和bottom使菜单垂直方向上铺满浏览器

  咱们看下App组件的效果:

  咱们须要新建一个组件来编写产品列表的代码:Content.vue

  Content组件主要就是三点:

    3.内容页的布局:须要设置左边距 margin-left:150px,这样就不会和菜单产生覆盖。

  接着咱们配置菜单中的【产品】连接渲染到产品列表的路由。

  能够看到点击菜单栏的【产品】已经能够成功的渲染出Content.vue组件并展现产品列表了。

  产品详情组件比较简单,主要有下面几点:

  1.点击不一样的产品名称须要渲染到产品详情组件,所以产品名称到产品详情的路由会采用动态路由去实现。

  2.使用了$route.parmas获取了动态路由中的参数并在模板中展现。

  接着就须要配置从产品名称到产品详情的动态路由了

// 引入路由须要映射的组件

   代码完成,大概能想到的结果就是:当点击产品名称时,产品列表下方就会出现产品详情。

  emmmmmm,跟咱们想要的效果咋不同:产品详情覆盖了产品列表。可是在Content.vue页面,咱们明明使用<router-view>已经告知了产品详情组件应该渲染的位置。

  到这里呢,咱们这节的主角嵌套路由就要登场了。

  在回到咱们的需求和咱们前面实现的代码,App组件、Content组件和ProductDetail组件这三者的关系是一层一层往下嵌套而且结合vue-router、router-view显示的:

   由于组件之间是这样嵌套的关系,因此对应路由也须要按照这个结构去嵌套。

   那路由嵌套呢,就是在单条路由配置中添加children选项,children选项就是和routes同样的路由配置数组,同时还支持屡次的嵌套。

  话很少少,咱们将产品详情这条路由嵌套到产品列表路由配置下。

  备注:App组件是根组件,全部的组件都是嵌套在该组件下的,默认路由也都是嵌套在根组件下。

// 引入路由须要映射的组件 // 产品详情须要使用路由嵌套才能实现

  这里还须要把ProductDetail.vue组件中的界面布局修改一下:

  如今就没啥问题了,咱们在看下效果:

  如今这个效果就是咱们想要的效果了。是否是也很简单呢 hahahahaha

1.是否须要使用嵌套路由是要根据组件以前是否存在嵌套关系。

2.路由嵌套就是在单条路由配置中添加children选项,children选项就是和routes同样的路由配置数组,同时还支持屡次的嵌套。

我要回帖

更多关于 多个router-view 的文章

 

随机推荐