首页 > 其他 > 详细

(3)vue-router的介绍

时间:2021-06-17 23:08:33      阅读:41      评论:0      收藏:0      [点我收藏+]

1.URL的hash和H5的history模式

URL的hash的理解:原来:localhost:8080/#      在console输入:location.hash=‘aijiang‘         现在:localhost:8080/#/aijiang

H5的history模式:pushState(类似于入栈)  /  replaceState (替换页面,而不是将界面压入栈)   /  back(类似于出栈)  /  go

2.使用vue-router的步骤

创建router实例

技术分享图片

挂载到vue实例中

技术分享图片

创建路由组件

技术分享图片

配置组件和路径映射关系

技术分享图片

使用路由(html方式)

技术分享图片

还有另一种路由使用方式(JS代码方式)。有时候, 页面的跳转可能需要执行对应的JavaScript代码

技术分享图片

注意:

 

  • 定义导航组件。使用vue-router组件库暴露出来的<router-link>组件来定义导航标签,其中通过to属性来指定跳转的链接。router-link最终会被编译成<a>标签。

  • 定义渲染位置。使用vue-router组件暴露出来的<router-view>组件来控制渲染位置。当浏览器的路劲和我们的路由列表中的一个匹配的时候,就会把对应的组件渲染在router-view的位置。

3.路由的默认路径和H5的history模式

技术分享图片    技术分享图片

 

4.动态路由

 在某些情况下,一个页面的path路径可能是不确定的,比如我们进入用户界面时,希望是如下的路径:

? /user/aaaa或/user/bbbb
? 除了有前面的/user之外,后面还跟上了用户的ID
? 这种path和Component的匹配关系,我们称之为动态路由(也是路由传递数据的一种方式)

技术分享图片

5.路由的懒加载

?路由懒加载的主要作用就是将路由对应的组件打包成一个个的js代码块.
?只有在这个路由被访问到的时候, 才加载对应的组件

const Home = () => import(‘views/home/Home‘)
const Category = () => import(‘views/category/Category‘)
const Cart = () => import(‘views/cart/Cart‘)
const Profile = () => import(‘views/profile/Profile‘)
const Detail = () => import(‘views/detail/Detail‘)

6.嵌套路由

嵌套路由是一个很常见的功能

? 比如在home页面中, 我们希望通过/home/news和/home/message访问一些内容.
? 一个路径映射一个组件, 访问这两个路径也会分别渲染两个组件

 

实现嵌套路由有两个步骤:
? 创建对应的子组件, 并且在路由映射中配置对应的子路由.
? 在组件内部使用<router-view>标签

技术分享图片

技术分享图片

技术分享图片

技术分享图片

7.传递路由参数的方式

传递参数主要有两种类型: params和query

? params的类型:
    配置路由格式: /router/:id
    传递的方式: 在path后面跟上对应的值
    传递后形成的路径: /router/123, /router/abc
? query的类型:
    配置路由格式: /router, 也就是普通配置
    传递的方式: 对象中使用query的key作为传递方式
    传递后形成的路径: /router?id=123, /router?id=abc

query 方式传参和接收参数

 传参: 

this.$router.push({
       path:‘/openAccount‘,
       query:{id:id}
     });

 接收参数:

this.$route.query.id

params方式传参和接收参数

传参:

  this.$router.push({
       name:‘openAccount‘,
       params:{
         id: id
       }
     })

接收参数:

 this.$route.params.id

注意:

1.params传参,push里面只能是 name:‘xxxx‘,不能是path:‘/xxx‘,因为params只能用name来引入路由,如果这里写成了path,接收参数页面会是undefined!!!

2. 二者还有点区别,可以理解为:query相当于get请求,页面跳转的时候,可以在地址栏看到请求参数,而params相当于post请求,参数不会再地址栏中显示

3.传参是this.$router,接收参数是this.$route。两者区别:

   $router为VueRouter实例,想要导航到不同URL,则使用$router.push方法

   $route为当前router跳转对象,里面可以获取name、path、query、params等

 

router.js

export default new Router({
 routes: [
  {
   path: ‘/‘,
   name: ‘login‘,
   component: Login
  },
  {
   path: ‘/register‘,
   name: ‘register‘,
   component: Register
  }
})

组件(传参)

<template>
 <div class="hello">
  <h1>{{ msg }}</h1>
  <button @click="routerTo">click here to news page</button>
 </div>
</template>
<script>
export default {
 name: ‘HelloWorld‘,
 data () {
  return {
   msg: ‘Welcome to Your Vue.js App‘
  }
 },
 methods:{
  routerTo(){
   this.$router.push({ name: ‘register‘, params: { userId: 123 }});//params方式 这里的name值是在定义route.js时中的name
   //this.$router.push({ path: ‘/register‘, query: { userId: 123 }});//query方式 
  }
 }
}
</script>
<style>
</style>

组件(接参)

<template>
 <div>
  {{this.$route.params.userId}}或者{{this.$route.query.userId}}
 </div>
</template>
<script>
</script>

8.导航守卫(搁置,等项目遇到了在回头看)

vue-router提供导航守卫主要用来监听路由的进入和离开
vue-router提供了beforeEach和afterEach的钩子函数, 它们会在路由即将改变前和改变后触发.

 

9.keep-alive

可以在组件切换时,保存其包裹的组件的状态,使其不被销毁,防止多次渲染。 其拥有两个独立的生命周期钩子函数 actived 和 deactived,使用keep-alive包裹的组件在切换时不会被销毁,而是缓存到内存中并执行 deactived 钩子函数,命中缓存渲染后会执行 actived 钩子函数。

它们有两个非常重要的属性:
? include - 字符串或正则表达,只有匹配的组件会被缓存
? exclude - 字符串或正则表达式,任何匹配的组件都不会被缓存
? router-view 也是一个组件,如果直接被包在 keep-alive 里面,所有路径匹配到的视图组件都会被缓存:

技术分享图片

 

<template>
  <div id="app" class="wrapper">
<!-- 希望点一个新的图片,会有新的商品内容,重新执行Detail的created,获取新的iid-->
    <keep-alive exclude="Detail">
      <router-view/>
    </keep-alive>
    <main-tab-bar/>
  </div>
</template>

 

(3)vue-router的介绍

原文:https://www.cnblogs.com/ai-jiang/p/vue-3.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!