入门

用 Vue + Vue Router 创建单页应用非常简单:通过 Vue.js,我们已经用组件组成了我们的应用。当加入 Vue Router 时,我们需要做的就是将我们的组件映射到路由上,让 Vue Router 知道在哪里渲染它们。下面是一个基本的例子:

HTML

  1. <script src="https://unpkg.com/vue@3"></script>
  2. <script src="https://unpkg.com/vue-router@4"></script>
  3. <div id="app">
  4. <h1>Hello App!</h1>
  5. <p>
  6. <!--使用 router-link 组件进行导航 -->
  7. <!--通过传递 `to` 来指定链接 -->
  8. <!--`<router-link>` 将呈现一个带有正确 `href` 属性的 `<a>` 标签-->
  9. <router-link to="/">Go to Home</router-link>
  10. <router-link to="/about">Go to About</router-link>
  11. </p>
  12. <!-- 路由出口 -->
  13. <!-- 路由匹配到的组件将渲染在这里 -->
  14. <router-view></router-view>
  15. </div>

router-link

请注意,我们没有使用常规的 a 标签,而是使用一个自定义组件 router-link 来创建链接。这使得 Vue Router 可以在不重新加载页面的情况下更改 URL,处理 URL 的生成以及编码。我们将在后面看到如何从这些功能中获益。

router-view

router-view 将显示与 url 对应的组件。你可以把它放在任何地方,以适应你的布局。

JavaScript

  1. // 1. 定义路由组件.
  2. // 也可以从其他文件导入
  3. const Home = { template: '<div>Home</div>' }
  4. const About = { template: '<div>About</div>' }
  5. // 2. 定义一些路由
  6. // 每个路由都需要映射到一个组件。
  7. // 我们后面再讨论嵌套路由。
  8. const routes = [
  9. { path: '/', component: Home },
  10. { path: '/about', component: About },
  11. ]
  12. // 3. 创建路由实例并传递 `routes` 配置
  13. // 你可以在这里输入更多的配置,但我们在这里
  14. // 暂时保持简单
  15. const router = VueRouter.createRouter({
  16. // 4. 内部提供了 history 模式的实现。为了简单起见,我们在这里使用 hash 模式。
  17. history: VueRouter.createWebHashHistory(),
  18. routes, // `routes: routes` 的缩写
  19. })
  20. // 5. 创建并挂载根实例
  21. const app = Vue.createApp({})
  22. //确保 _use_ 路由实例使
  23. //整个应用支持路由。
  24. app.use(router)
  25. app.mount('#app')
  26. // 现在,应用已经启动了!

通过调用 app.use(router),我们可以在任意组件中以 this.$router 的形式访问它,并且以 this.$route 的形式访问当前路由:

  1. // Home.vue
  2. export default {
  3. computed: {
  4. username() {
  5. // 我们很快就会看到 `params` 是什么
  6. return this.$route.params.username
  7. },
  8. },
  9. methods: {
  10. goToDashboard() {
  11. if (isAuthenticated) {
  12. this.$router.push('/dashboard')
  13. } else {
  14. this.$router.push('/login')
  15. }
  16. },
  17. },
  18. }

要在 setup 函数中访问路由,请调用 useRouteruseRoute 函数。我们将在 Composition API 中了解更多信息。

在整个文档中,我们会经常使用 router 实例,请记住,this.$router 与直接使用通过 createRouter 创建的 router 实例完全相同。我们使用 this.$router 的原因是,我们不想在每个需要操作路由的组件中都导入路由。