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
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)
    }
}
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)
    }
}

### Vue.js 中的路由封装及最佳实践 在 Vue.js 开发过程中,合理地封装路由能够提升项目的可维护性和扩展性。以下是关于如何在 Vue.js 中进行路由封装的最佳实践。 #### 1. 创建独立的路由模块 为了保持项目结构清晰,在 `src` 文件夹下创建一个名为 `router` 的文件夹,并在其内部新建一个 `index.js` 文件用于定义和管理所有的路由逻辑[^3]。 ```javascript // src/router/index.js import { createRouter, createWebHistory } from 'vue-router'; import Home from '../views/Home.vue'; // 主页组件 import About from '../views/About.vue'; // 关于我们页面组件 const routes = [ { path: '/', name: 'Home', component: Home, }, { path: '/about', name: 'About', component: About, } ]; const router = createRouter({ history: createWebHistory(), routes, }); export default router; ``` 上述代码展示了基本的路由设置方式,其中引入了两个虚拟组件 (`Home`, `About`) 并将其映射至不同的路径上。 #### 2. 动态加载懒加载优化 对于大型应用而言,一次性加载所有资源可能会增加首屏渲染时间。因此推荐采用动态导入的方式实现按需加载(即懒加载),从而提高性能。 更新后的 `routes` 配置如下: ```javascript const routes = [ { path: '/', name: 'Home', component: () => import('../views/Home.vue'), // 使用箭头函数配合 import 进行动态加载 }, { path: '/about', name: 'About', component: () => import('../views/About.vue'), } ]; ``` 这种方式仅当用户访问特定页面时才会触发对应模块的下载操作。 #### 3. 路由守卫的应用 通过全局前置导航守卫可以控制用户的跳转行为,比如验证登录状态或者权限校验等场景非常适用。 示例代码展示了一个简单的未授权访问拦截器: ```javascript router.beforeEach((to, from, next) => { const isAuthenticated = localStorage.getItem('token'); // 假设存在 token 表明已登录 if (to.name !== 'Login' && !isAuthenticated) { return next({ name: 'Login' }); // 如果目标不是登录页且无有效凭证,则强制转向登录界面 } next(); // 否则继续正常流程 }); ``` 此部分应放置于 `index.js` 文件底部以确保其生效范围覆盖整个应用内的每一次切换动作。 #### 4. 在主入口处注册路由器实例 最后一步是在启动程序的时候绑定好刚才建立好的路由服务。打开 `main.js` 文件完成这一步骤: ```javascript import { createApp } from 'vue'; import App from './App.vue'; import router from './router'; createApp(App).use(router).mount('#app'); ``` 至此为止便完成了基于 Vue Router 插件的一整套基础架构搭建工作流说明。 --- ### 总结 以上介绍了有关 Vue.js 下如何科学有效地实施路由机制的相关知识点以及具体实施方案。遵循这些指导原则可以帮助开发者更高效地组织自己的前端工程体系结构,同时也利于后期维护升级等工作开展。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值