vue手写<RouterLink/>组件实现demo详解

 更新时间:2023年06月16日 09:34:09   作者:XiaoSong  
这篇文章主要为大家介绍了vue手写<RouterLink/>组件实现demo详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

手写<RouterLink/>组件

上一节 手写<RouterView/>组件

如果使用a标签改变页面会重新发起请求,但是我们点击<RouterLink/>的时候不会。以下手把手实现一个简单的<RouterLink/>组件。这节内容与手写<RouterView/>组件(上一节内容)有一定的联系,建议先看一下。

1、加上一个响应式数据

在上一节的基础上加上一个响应式数据(把获取当前路径写在了这里)。

import About from '../view/About.vue'
import Home from '../view/Home.vue'
import {ref} from 'vue'
export default [
    {
        path: '/',
        component: Home
    },
    {
        path: '/about',
        component: About
    }
]
// 新加内容
export const path = ref(window.location.pathname)

2、对<RouterView/>组件进行简单的改造

<template>
    <div>
        <component :is="view"></component>
    </div>
</template>
<script setup>
import { computed } from 'vue'
import Router from '../Router';
// 引入path这个响应式数据
import { path } from '../Router';
const view = computed(() => {
  // 这里直接使用的path
   const res = Router.find(item => item.path == path.value)
   return res.component
})
</script>
<style lang="scss" scoped>
</style>

3、创建<RouterLink/>组件

内容如下:

@click.prevent阻止a标签的默认行为,让其被点击时执行push函数。push函数里执行的就是改变path为要加载的页面路径。

<template>
    <div>
        <a :href="to" rel="external nofollow"  @click.prevent="push">
            <slot></slot>
        </a>
    </div>
</template>
<script setup>
import { path } from '../Router';
const props = defineProps({
    to: {type: String, required: true}
})
const push = () => {
    path.value = props.to
}
</script>

4、在App.vue中使用

当你点击时不会重新请求。

<RouterLink :to="'/'">首页</RouterLink>
<RouterLink :to="'/about'">关于</RouterLink>
<RouterView></RouterView>

以上就是vue手写RouterLink组件实现demo详解的详细内容,更多关于vue手写RouterLink组件的资料请关注脚本之家其它相关文章!

相关文章

  • 如何根据业务封装自己的功能组件

    如何根据业务封装自己的功能组件

    这篇文章主要介绍了Vue封装功能组件,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-04-04
  • 解决vue中监听input只能输入数字及英文或者其他情况的问题

    解决vue中监听input只能输入数字及英文或者其他情况的问题

    今天小编就为大家分享一篇解决vue中监听input只能输入数字及英文或者其他情况的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-08-08
  • vite项目配置less全局样式的实现步骤

    vite项目配置less全局样式的实现步骤

    最近想实现个项目,需要配置全局less,本文主要介绍了vite项目配置less全局样式的实现步骤,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧
    2024-02-02
  • vue-router路由懒加载和权限控制详解

    vue-router路由懒加载和权限控制详解

    这篇文章主要介绍了vue-router路由懒加载和权限控制的相关资料
    2017-12-12
  • Vue项目中使用Sass的完整指南(方案解析)

    Vue项目中使用Sass的完整指南(方案解析)

    本文详细介绍了在Vue项目中集成Sass的步骤和技巧,包括安装依赖、基本使用、不同构建工具的配置、全局变量和混入的配置,以及项目结构建议和常见问题解决方案,特别强调了Vue3+Vite项目中使用Sass的便捷性,感兴趣的朋友跟随小编一起看看吧
    2026-01-01
  • 解决nuxt 自定义全局方法,全局属性,全局变量的问题

    解决nuxt 自定义全局方法,全局属性,全局变量的问题

    这篇文章主要介绍了解决nuxt 自定义全局方法,全局属性,全局变量的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-11-11
  • Vue2项目如何使用pdfjs-dist解析pdf

    Vue2项目如何使用pdfjs-dist解析pdf

    这篇文章主要为大家详细介绍了Vue2项目如何使用pdfjs-dist解析pdf相关,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2025-05-05
  • Vue API中setup ref reactive函数使用教程

    Vue API中setup ref reactive函数使用教程

    setup是用来写组合式api,内部的数据和方法需要通过return之后,模板才能使用。在之前vue2中,data返回的数据,可以直接进行双向绑定使用,如果我们把setup中数据类型直接双向绑定,发现变量并不能实时响应。接下来就详细看看它们的使用
    2022-12-12
  • 如何实现一个简易版的vuex持久化工具

    如何实现一个简易版的vuex持久化工具

    这篇文章主要介绍了实现一个简易版的vuex持久化工具,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-09-09
  • vue调用高德地图实例代码

    vue调用高德地图实例代码

    本篇文章主要介绍了vue调用高德地图实例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-04-04

最新评论