美文网首页让前端飞
路由的详解及vue-router模块实例

路由的详解及vue-router模块实例

作者: 喆哲 | 来源:发表于2020-03-10 21:43 被阅读0次

演示项目源码

  • 什么是路由?

1、后端路由:早期会通过解析不同的URL,服务器找到对应的资源,并渲染成页面,最后将对应的页面返回给客户端直接展示。
2、前端路由:前后端分离后,可以先通过静态资源服务器拿到HTML+CSS+JS文件,然后在进入不同页面的时候使用Ajax获取API服务器上的数据资源,这样最大的优点就是前后端责任清晰,后端专注于数据,前端专注于可视化,服务器压力也比较小。
3、前端路由/SPA:
a、首先,对于单页面应用程序整个项目只有一个HTML,用户一开始就获取整个项目静态资源。
b、SPA是在前端路由的基础上又增加了一层前端路由,通过监测href的数据来切换不同的组件,切换到的组件发起Ajax请求,最后在API服务器上拿到数据资源,看起来就像进入了新页面一样。
c、vue-router是通过hash来修改href并可以做到不刷新页面。(href是一个栈储存,先进后出)
备注:URL:
协议:// 主机:端口/路径?查询#哈希
scheme:// host:port/path?query#fragment

location.hash = '/home'
history.pushState({},'','/home') // HTML提供的方法
history.go(-1) // 复数后退,正数为前进,数字带表步数
  • 具体的使用方法:
// 安装vue-router,并新建文件夹router->index.js
npm install vue-router --save 

在index.js中配置路由项

import Vue from 'vue'
import VueRouter from 'vue-router'
import about from '@/components/about'
import home from '@/components/home'

use(VueRouter) // 安装注入插件
routes = [
  {
    path: '/',
    name: 'home',
    component: home,
    redirect: '/home' // 重定向
    meta: {   // 元数据(描述数据的数据)
        title: '首页'
    },
    beforeEach: (to, form, next) => {}, // 路由独享守卫
    children: [  // 嵌套子路由
        {
          path: '/',
          component: isMessage
        },
        {
          path: 'isMessage',
          component: isMessage
        },
        {
          path: 'isNew',
          component: isNew
        }
      ]
  },
  {
    path: '/about/:aboutId', // 动态绑定路由
    component: about,
    meta: {
        title: '关于'
      },
  },
  {
    path: '/shopList',
    component: shopList,
    meta: {
    title: '商品',
    
   },
 }
]
// 创建router实例
const router = new VueRouter({
  routes
})
// 前置守卫(guard)
router.beforeEach((to, form, next) => {
  window.document.title = to.matched[0].meta.title // 修改每个页面的标题
  next() // 必须调用,否则不生效
})
// 后置钩子(hook)
router.afterEach((to, form) => {
  console.log(to) 
})
export default router // 导出实例

挂载到vue实例

// 在main.js中
import router from './router' // 导入
new Vue({
  el: ''#app',
  router,
  render: h => h(App) 
})

路由跳转

<router-link to="/home" tag="button" replace>按钮</router-link>
// tag指定渲染成什么样的标签,replace不会在history中留下记录,无法回退
this.$router.push('/home')
this.$router.replace('/home') // 无痕浏览
this.$router.go('/home') // 接受一个整数作为参数,在 history 记录中向前后多少步
<router-link :to="'/about/'+aboutData" tag="button">关于</router-link>
// 动态页面的跳转aboutData在data中定义
<h3>{{$route.params.aboutId}}</h3>
 // 在about页面中用可以拿到在动态的URL
<keep-alive exclude='about'>  
// exclude排除某个路由不缓存,include为缓存,使用页面name属性标记,多个状态用逗号且不能使用空格
// 路由来回跳转时,保持页面不更新
  <router-view/>
</keep-alive>
activated () { // 活跃状态执行函数
  this.$router.push(this.path) // 在活跃状态的时候直接进入到需要展示的路由 
},
deactivated() { // 非活跃状态执行函数
  console.log('deactivated')   
},
// 以上两个函数必须适应keep-alive才会有效
beforeRouteLeave (to, from, next) {
  this.path = this.$route.path // 离开页面的时候记录下用户选择的路由
  next()
}

嵌套路由

<router-link to='/home/isMessage'>消息</router-link>
<router-link to='/home/isNew'>新闻</router-link>
<router-view/>

路由的懒加载:js的静态资源按组件分包,用到时再发送请求

// import about from '@/components/about'
// import home from '@/components/home'
const about = () => import('@/components/about')
const home = () => import('@/components/home')

路由传参

<router-link :to="{path:'/shopList',query:{userId: '9527'}}" tag="button"></router-link> // 传参
<h3>{{$route.query.userId}}</h3> // 接收参数
// 函数跳转
<button @click="listClick">商品</button>
listClick () {
 this.$router.push({
   path: '/shopList',
   query: {
   name: 'word'
   }
 })}
<h3>{{$route.query.name}}</h3> // 接收参数

组件内守卫

const Foo = {
  template: `...`,
  beforeRouteEnter (to, from, next) {
    // 在渲染该组件的对应路由被 confirm 前调用
    // 不!能!获取组件实例 `this`
    // 因为当守卫执行前,组件实例还没被创建
  },
  beforeRouteUpdate (to, from, next) {
    // 在当前路由改变,但是该组件被复用时调用
    // 举例来说,对于一个带有动态参数的路径 /foo/:id,在 /foo/1 和 /foo/2 之间跳转的时候,
    // 由于会渲染同样的 Foo 组件,因此组件实例会被复用。而这个钩子就会在这个情况下被调用。
    // 可以访问组件实例 `this`
  },
  beforeRouteLeave (to, from, next) {
    // 导航离开该组件的对应路由时调用
    // 可以访问组件实例 `this`
  }
}

相关文章

  • 路由的详解及vue-router模块实例

    演示项目源码 什么是路由? 1、后端路由:早期会通过解析不同的URL,服务器找到对应的资源,并渲染成页面,最后将对...

  • Vue 基础 - 前端路由

    使用vue-router实现前端路由 安装vue-router: 配置路由文件,并在vue实例中导入: 设置视图(...

  • vue路由设置

    vue本身是不支持路由,想用的话就得引入一个模块vue-router 路由模块

  • Vue.js路由

    1.设置路由 ① 路由map 在main.js中导入vue-router 设置全局路由 实例化router ②路由...

  • Vue.js 学习笔记(三)

    路由 vue-router 的基本使用 定义组件 定义 vue-router 关联到 Vue 实例 实现 效果展示...

  • Vue路由

    一、安装依赖 1. Vue-router模块Vue的路由功能主要依靠Vue-router模块来实现,所以必须在项目...

  • Vue-router 路由 (常见用法)

    vue-router 的常见用法 一个完整的路由必须包含:路由链接和路由占位符、路由实例、路由规则链接的路由组件 ...

  • Vue笔记——路由配置

    一、安装路由模块 要在自己的Vue项目中使用路由,首先要通过以下命令来安装路由模块vue-router 我们这里配...

  • Nuxt.js路由

    路由 Nuxt.js依据pages目录结构自动生成vue-router模块的路由配置。 要在页面之间使用路由,我们...

  • 6.webpack下使用 vue-router

    在vue组件页面中,集成vue-router路由模块 vue-router官网 先贴上main.js的完整代码: ...

网友评论

    本文标题:路由的详解及vue-router模块实例

    本文链接:https://www.haomeiwen.com/subject/fgqwqhtx.html