IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> vue路由的封装与使用 -> 正文阅读

[JavaScript知识库]vue路由的封装与使用

封装路由首先要明确的是业务需求,以及路由的基本原理

下面从几个点进行阐述:

1.关于路由的目录结构

router
????????index.is
????????routes is

?????????index.js文件里面存放的是关于路由的一些基本配置

index.js

import Vue from 'vue'
import VueRouter from "vue-router"
import routes from '/routes'

Vue.use(VueRouter)

// 解決编程式路由住同一地址跳转时会报错的恃观
const originalPush = VueRouter.prototype. push
cost originalReplace = VueRouter.prototype.replace
// push
VueRouter.prototype.push = function push (location, onResolve, onReject) t
if (onResolve || onReject) {
    return originalPush.call(this, location, onResolve, onReject)
} else {
    return originalPush.call(this, location).catch(err => err)
}
// replace
VueRouter.prototype.replace = function push (location, onResolve, onReject) {
if (onResolve || onReject) {
return originalReplace.call(this, location, onResolve, onReject)
} else {
return originalReplace.call(this, location).catch(err => err)
}

const router = new VueRouter({
routes
})

export default router;

????????routes.js里面放的是定义的路由路径

routes.js

// 定义路由路径
const routes = [
    {
        path:'/home',
        component:()=? import ('@/views/home.vue')
    },
    {
        path:'/about',
        component:()=> import('@/views/about.vue')
    },
    // 重定向
    {
        path: '/',
        redirect:'/home'
    }
]

export default routes;

????????最后将这些文件在main.is文件里面引入

main.js

import Vue from "vue"
import App from "./App.vue"
import router from "./router"

Vue. config.productionTip = false

new Vue({
router,
render: h =>h(App)
}).$mount('#app')

2.详解封装步骤与思路

? ? ? ? 首先我们要在项目中进行安装路由 npm i vue-router --save

? ? ? ? 然后再index.js文件中进行引入并进行使用

????????

import Vue from 'vue'
import VueRouter from 'vue-router'
Vue.use(VueRouter)

? ? ? ? 之后我们就进行路由路径的配置

const router = new VueRouter({
    routes
})

?????????因为我们进行的是路由模块化的处理。为了更简洁方便的进行频繁的使用路由的配置
所以就把路由路径放到一个独立的文件routes.js中,然后我们在index.js文件中 引入就可以了

import routes from './routes'

?????????在routes.js文件中进行定义路由路径,path指的是要跳转的路径,component指的是跳转路径的组件,这其中设置了一个重定向,因为我们初始化页面的时候路径为"/",因为我们没有定义路径为"/"的组件,所以我们就把路径为"/"的时候重定向为"/home",这样的话在我们初始化页面的时候
就会看到路径为"/home"的组件页面了

// 定义路由路径
const routes = [
    {
        path:'/home',
        component:()=? import ('@/views/home.vue')
    },
    {
        path:'/about',
        component:()=> import('@/views/about.vue')
    },
    // 重定向
    {
        path: '/',
        redirect:'/home'
    }
]

export default routes;

? ? ? ? 这些操作之后我们就需要在main.js文件中进行引入并进行挂载

new Vue({
router,
render: h =>h(App)
}).$mount('#app')

? ? ? ? 在这些都完成之后路由封装的第一阶段便已完成,接下来就是进行使用了,在这里我使用的是编程式路由跳转,也就是使用this.$router.push()进行操作,需要给一个事件来进行触发

????????

this.$router.push({
    path:'/home'
})

也可以带参数

this.$router.push({
    path:'/about',
    query:{
        id:'123'
    }
})

? ? ? ? <router- view></router-view>类似于占位符,这个就代表路由跳转的页面;
这个时候有两种情况需要考虑,第一就是类似于tab页一样,只切换部分页面,另一种就是整
个页面完全切换

App.vue

<template>
    <div>
        <button @click="about">about</button>
        <button @click="home">home</button>
        <router-view></router-view>
    </div>
</template>

<script>
export default {
methods: {
home(){
    this.$router.push({
        path:"/home"
    })
},
about(){
    this.$router.push({
        path:"/about",
        query:{
            id:"123"
        }
    })
}
</script>

home.vue

<template>
    <div>
        <h1>home页面</h1>
    </div>
</template>

<script>
export default {
methods: {}
};
</script>
<style>
</style>

about.vue

<template>
    <div>
        <h1>about页面</h1>
    </div>
</template>

<script>
export default {
methods: {}
};
</script>
<style>
</style>

? ? ? ? 整个页面完全切换

App.vue

<template>
    <div>
        <router-view></router-view>
    </div>
</template>

<script>
export default {
methods: {}
</script>

home.vue

<template>
    <div>
        <button @click="about">about</button>
        <h1>home页面</h1>
    </div>
</template>

<script>
export default {
methods: {
    about(){
    this.$router.push({
        path:"/about",
        query:{
            id:"123"
        }
    })
  }
};
</script>
<style>
</style>

about.vue

<template>
    <div>
        <button @click="home">home</button>
        <h1>about页面</h1>
    </div>
</template>

<script>
export default {
methods: {
    home(){
    this.$router.push({
        path:"/home"
    })
   }
};
</script>
<style>
</style>

3.需要注意的点以及可能出现的报错
????????以上的封装基本完成,但是可能会出现一个报错,就是重复跳转路田,也就是同一个路由路
径重复使用了,为子解决编程式路由往同一地址跳转时会报错的情況,在indexjs文件中添加这段代码,其中replace和push是编程式导航的方法

const originalPush = VueRouter.prototype.push
const originalReplace = VueRouter.prototype.replace
// push
VueRouter.prototype.push = function push(location, onResolve, onReject) {
if (onResolve || onReject) {
return originalpush.call(this, location, onResolve, onReject)
} else {
return originalPush.call(this, location).catch(err => err)
}
// replace
VueRouter.prototype.replace = function push(location, onResolve, onReject) {
if (onResolve || onReject) {
return originalReplace.call(this, location, onResolve, onReject)
} else {
return originalReplace.call(this, location).catch(err =? err)
    }
}

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2021-12-01 17:37:04  更:2021-12-01 17:37:32 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/20 22:54:29-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码