Vue3中的Vue Router初探

更新日期: 2020-02-06 阅读: 2.9k 标签: Vue3

对于大多数单页应用程序而言,管理路由是一项必不可少的功能。随着新版本的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版本的主要区别在于我们必须导入新方法才能使代码正常工作。其中最重要的是createRouter 和 createWebHistory。

在我们的 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路由器

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

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

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,这是一个很好的模板代码。

文章首发《前端外文精选》微信公众号


本文内容仅供个人学习、研究或参考使用,不构成任何形式的决策建议、专业指导或法律依据。未经授权,禁止任何单位或个人以商业售卖、虚假宣传、侵权传播等非学习研究目的使用本文内容。如需分享或转载,请保留原文来源信息,不得篡改、删减内容或侵犯相关权益。感谢您的理解与支持!

链接: https://fly63.com/article/detial/8868

相关推荐

Vue3 Hook 到底是啥黑魔法?

早就听说,React社区,已经全面拥抱Hook。Vue3的发布也支持了自定义Hook,作为只会Vue的前端小码农自然要去看看Vue3 Hook到底是啥黑魔法?

快速进阶Vue3.0

在2019.10.5日发布了Vue3.0预览版源码,但是预计最早需要等到 2020 年第一季度才有可能发布 3.0 正式版。新版Vue 3.0计划并已实现的主要架构改进和新功能:

vue3在setup中通过$ref获取dom元素

在使用vue2的时候,我们需要获取dom元素,或者获取组件的相关方法属性,一般都是通过this.$refs[domName]的方式,但是在vue3的setup中是没有this的,那么如何获取$refs呢?

vue3对比vue2使用,代码解释最直观

对于大多数组件,Vue2和Vue3中的代码即使不完全相同,也是非常相似的。但是,Vue3支持片段,这意味着组件可以有多个根节点。这在呈现列表中组件以删除不必要的包装器div元素时特别有用。但是,在本例中,表单组件的两个版本都将只保留一个根节点

浅谈Vue3的watchEffect用途

vue2里面的 watch api 大家应该都挺熟悉的了, vue2中vue实例里面有一个 $watch 方法 在sfc(sigle file component)里面有一个 watch 选项。他可以实现在一个属性变更的时候,去执行我们想要的行为

从 Proxy 到 Vue 源码,深入理解 Vue 3.0 响应系统

10 月 5 日,尤雨溪在 GitHub 开放了 Vue 3.0 处于 pre-alpha 状态的源码,这次 Vue 3.0 Updates 版本的更新,将带来五项重大改进:速度体积、可维护性、面向原生、易用性

Vue3数据响应系统

Vue3 就是基于 Proxy 对其数据响应系统进行了重写,现在这部分可以作为独立的模块配合其他框架使用。数据响应可分为三个阶段: 初始化阶段 --> 依赖收集阶段 --> 数据响应阶段

在Vue2与Vue3中构建相同的组件

Vue 开发团队终于在今天发布了 3.0-beta.1 版本,也就是测试版。通常来说,从测试版到正式版,只会修复 bug,不会引入新功能,或者删改老功能。所以,如果你对新版本非常感兴趣,或者有新项目即将上马,不妨尝试一下新版本

Vue 的数据响应式(Vue2 及 Vue3)

从一开始使用 Vue 时,对于之前的 jq 开发而言,一个很大的区别就是基本不用手动操作 dom,data 中声明的数据状态改变后会自动重新渲染相关的 dom。换句话说就是 Vue 自己知道哪个数据状态发生了变化及哪里有用到这个数据需要随之修改。

200 行从零实现 vue3

emmm 用半天时间捋顺了 vue3 的源码,再用半天时间写了个 mini 版……我觉得我也是没谁了,vue3 的源码未来一定会烂大街的,我们越早的去复现它,就……emm可以越早的装逼hhh

点击更多...

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!