Vue3中的Vue Router初探

news/2024/7/24 6:30:48 标签: 前端, vue

在这里插入图片描述

对于大多数单页应用程序而言,管理路由是一项必不可少的功能。随着新版本的Vue Router处于Alpha阶段,我们已经可以开始查看下一个版本的Vue中它是如何工作的。

Vue3中的许多更改都会稍微改变我们访问插件和库的方式,其中包括Vue Router。我们将结合使用Alpha版本的Vue Router和当前的Vue3 Alpha版本进行研究。

本文告诉你如何将Vue Router添加到Vue3项目中,并有一个很好的小例子!

设置

首先,我们将使用由Evan You 发布的Vue3 Webpack预览版。

让我们使用 git clone https://github.com/vuejs/vue-next-webpack-preview.git 克隆仓库。

然后,要将vue-router alpha添加到我们的项目中,我们要修改 package.json 文件。

在我们的依赖关系中,我们想添加以下版本的vue-router

"dependencies": {
  "vue": "^3.0.0-alpha.10",
  "vue-router": "4.0.0-alpha.4"
}

现在,我们终于可以从命令行运行 npm install 来安装所有依赖项。

我们最终要做的设置是实际创建你的路由文件以及一些映射到它的视图。

src/ 文件夹中,我们将添加三个文件。

  • router/index.js
  • views/Home.vue
  • views/Contact.vue

我们的路由器文件将包含我们的路由器,并且我们的 Home/Contact 视图将只输出一个单词,以便我们了解发生了什么。

建立路由

一切准备就绪,让我们开始使用Vue Router!

简而言之,Vue Router的Vue3版本的主要区别在于我们必须导入新方法才能使代码正常工作。其中最重要的是createRoutercreateWebHistory

在我们的 router/index.js 文件中,让我们导入这两个方法以及前面的两个视图。

import { createRouter, createWebHistory } from 'vue-router'
import Home from '../views/Home.vue'
import Contact from '../views/Contact.vue'

接下来,我们要做的是使用createWebHistory方法创建一个routerHistory对象。

import { createRouter, createWebHistory } from 'vue-router'
import Home from '../views/Home.vue'
import Contact from '../views/Contact.vue'

const routerHistory = createWebHistory()

在此之前,我们可以只输入 mode: history 来从哈希模式切换到 history 模式,但是现在我们使用 history: createWebHistory() 来实现这一点。

接下来,我们实际上可以使用 createRouter 创建路由器,它接受一个对象,我们希望传递 routerHistory 变量以及两个路由的数组。

const router = createRouter({
  history: routerHistory,
  routes: [
    {
      path: '/',
      component: Home
    },
    {
      path: '/contact',
      component: Contact
    }
  ]
})

最后,让我们将路由导出。

export default router

如你所见,它仍然与Vue2非常相似。但是,通过所有这些更改,可以更好地支持Typescript和进行优化,因此熟悉新方法是很不错的。

vue_89">使用vue路由器

现在我们的Vue Router文件已经设置好了,我们可以将其添加到项目中了。以前,我们可以导入它并Vue.use(router),但这在Vue3中不一样。

在 main.js 文件中,你会看到我们正在使用Vue中的 createApp 方法来实际创建我们的项目。在默认项目中,它链接 createAppmount 方法。

const app = createApp(App)

app.mount('#app')

然后,在挂载我们的应用程序之前,我们想告诉它使用路由器文件。

import router from './router'

const app = createApp(App)

app.use(router)

app.mount('#app')

最后,在我们的App.vue文件中,让我们实际显示我们的 router-view 并提供一些 router-link,以便我们能够四处导航。

<template>
  <div id='root'>
    <img src='./logo.png' />
    <div id='nav'>
      <router-link to='/'> Home</router-link>
      <router-link to='/contact'>Contact </router-link>
    </div>
    <router-view />
  </div>
</template>

所以现在,如果我们单击一下,我们将看到实际上可以在两个页面之间导航!

但是,如果我们尝试直接进入我们的 /contact 路由,那将不起作用!我们遇到某种错误。

幸运的是,这是可以非常快速的用webpack修复。

在我们的 webpack.config.js 文件中,我们希望通过更改配置使devServer能够使用 history api,使它看起来像这样。

devServer: {
    inline: true,
    hot: true,
    stats: 'minimal',
    contentBase: __dirname,
    overlay: true,
    historyApiFallback: true
}

现在,如果我们直接导航到 /contact 路由,那么一切都应该正常运行

总结

我们已成功将vue-router添加到我们的Vue3项目中。其他大多数功能(例如导航守卫,处理滚动条)和这些功能大致相同。

这是本教程最终Github仓库的链接。如果您想在Vue3测试版中安装vue-router,这是一个很好的模板代码。


如果对你有所启发和帮助,可以点个关注、收藏、转发,也可以留言讨论,这是对作者的最大鼓励。

作者简介:Web前端工程师,全栈开发工程师、持续学习者。

关注公众号 前端外文精选》,私信回复:大礼包,送某网精品视频课程网盘资料,准能为你节省不少钱!


http://www.niftyadmin.cn/n/880157.html

相关文章

除了阿里的iconfont图标库,还有这10个开源SVG图标库

微信搜索【前端全栈开发者】关注这个脱发、摆摊、卖货、持续学习的程序员的公众号&#xff0c;第一时间阅读最新文章&#xff0c;会优先两天发表新文章。关注即可大礼包&#xff0c;送某网精品视频课程网盘资料&#xff0c;准能为你节省不少钱&#xff01; 在国内&#xff0c;我…

看了这篇你还不懂隐马尔可夫模型,你就来打死我吧

如标题一样&#xff0c;隐马尔可夫模型谜一样的推导和应用&#xff0c;一直是机器学习入门朋友们的一个拦路虎。就是那种&#xff0c;提起来大致知道&#xff1a;噢&#xff01;隐马模型啊&#xff0c;就是那个转移来转移去的一个模型&#xff0c;要解决三个基本问题&#xff0…

9个适用于Web开发人员的CSS工具

不管你是一个多么有经验的开发人员&#xff0c;你都想让你的生活尽可能的简单。正确的工具可以帮助您完成此任务。你的能力取决于你使用的工具&#xff0c;所以花点时间挑选适合你需要的工具是明智的。 在本文中&#xff0c;我将讨论每个web开发人员都可以使用的一些工具&…

Movie_recommender 电影推荐系统tensorflow代码学习小记

TensorFlow一向用得不多&#xff0c;只是稍微了解&#xff0c;推荐系统的项目也没有正经做过&#xff0c;现在就拿这个项目&#xff0c;好好入门一下推荐系统。 1.map 函数&#xff1a; 另外&#xff0c;map还可以这么用&#xff1a; 如要改变User数据中性别和年龄 gender_ma…

什么是纯函数,JavaScript函数式编程的基础概念

纯函数是所有函数式编程语言中使用的概念&#xff0c;这是一个非常重要的概念&#xff0c;因为它是函数式编程的基础&#xff0c;它允许你创建简单和复杂的组合模式。 纯函数背后的数学术语我就不说了&#xff0c;我直接说说说它们是什么以及它们的样子。 你可以确定满足以下条…

深度优先搜索+剪枝实战,你都弄懂了吗

我必须记这样一个坑爹的校招题 题目描述 一个袋子里面有n个球&#xff0c;每个球上面都有一个号码(拥有相同号码的球是无区别的)。如果一个袋子是幸运的当且仅当所有球的号码的和大于所有球的号码的积。 例如&#xff1a;如果袋子里面的球的号码是{1, 1, 2, 3}&#xff0c;这…

国外程序员怒吼!除非需要,否则不要制作NPM包了

我们在NPM中达到了100万个包大关——NPM是Node.js中事实上的包管理器。相信我&#xff0c;其中大约有30%左右的包都在做同样的事情。所以现在的问题是——什么时候够了&#xff1f; 过去 早期&#xff0c;Node.js是一个简单的运行时&#xff0c;但由于缺少库而受到限制&…