Vue3路由

文章目录

  • Vue3路由
    • [1. 载入vue-router 库](#1. 载入vue-router 库)
    • [2. 实例](#2. 实例)
      • [2.1 Vue.js + vue-router 实现单页应用](#2.1 Vue.js + vue-router 实现单页应用)
      • [2.2 router-link创建链接](#2.2 router-link创建链接)
      • [2.3 router-view显示与url对应组件](#2.3 router-view显示与url对应组件)
      • [2.4 `<router-link>` 相关属性](#2.4 <router-link> 相关属性)

Vue3路由

1. 载入vue-router 库

Vue.js 路由需要载入vue-router 库

  • 安装直接下载地址:https://unpkg.com/vue-router@4

  • NPM使用使用淘宝镜像:

    js 复制代码
    npm install -g cnpm --registry=https://registry.npmmirror.com
    cnpm install vue-router@4


2. 实例

2.1 Vue.js + vue-router 实现单页应用

  • <router-link> 是一个组件,该组件用于设置一个导航链接,切换不同 HTML 内容to 属性为目标地址, 即要显示的内容。

    以下实例中我们将 vue-router 加进来,然后配置组件和路由映射,再告诉 vue-router 在哪里渲染它们。代码如下所示:

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

2.2 router-link创建链接

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

2.3 router-view显示与url对应组件

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

html 复制代码
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>Vue 测试实例 router-link 来创建链接 router-view 将显示与 url 对应的组件</title>
    <script src="https://unpkg.com/vue@3"></script>
    <script src="https://unpkg.com/vue-router@4"></script>
</head>
<body>
<!--创建一个id为app class为demo的div-->
<div id="app" class="demo">
    <h1>Hello App</h1>
<!--   使用router-link组件进行导航 to传递制定链接-->
<!--    页面效果:<router-link></router-link>将呈现一个带有正确herf属性的<a>标签-->
    <p>
<!--        使用Home路由组件-->
        <router-link to="/">Go to Home</router-link>
<!--        使用About路由组件-->
        <router-link to="/about">Go to About</router-link>
    </p>

<!--    路由入口 路由匹配到的组件将渲染在这里-->
    <router-view></router-view>
</div>


<script>
//    1. 定义路由组件 也可以从其他文件导入
    const Home = { template: '<div>Home</div>'}
    const About = { template: '<div>About</div>'}

//  2.定义一些路由并映射到路由组件 每个路由都需要映射到一个组件
    const routes = [
        { path: '/', component: Home},
        { path: '/about', component: About},
    ]

//  3.创建路由实例并传递routes配置 可以在此输入更多的配置 单一般不输入 保持简单
    const router = VueRouter.createRouter({
    //     4. 内部提供了history模式实现 为了简单起见,我们在这里使用 hash 模式
        history: VueRouter.createWebHistory(),
        // routes:routes的缩写为routes
        routes,
    })

//  5. 创建并挂载根实例
    const app = Vue.createApp({})

//  确保_use_ 路由实例使整个应用支持路由
    app.use(router)
//  将app应用挂载到名为app的div
    app.mount('#app')

</script>
</body>
</html>

页面效果:

点击Go to Home

点击Go to About

  • 以上导航渲染结果:点击过的导航链接都会加上样式 class ="router-link-exact-active router-link-active"

    js 复制代码
    <a href="/" class="router-link-active router-link-exact-active" aria-current="page">Go to Home</a>
    <a href="/about" class="">Go to About</a>

2.4 <router-link> 相关属性

  • to表示目标路由的链接

    当被点击后,内部会立刻把 to 的值传到 router.push(),所以这个值可以是一个字符串或者是描述目标位置的对象。

    html 复制代码
    <!-- 字符串 -->
    <router-link to="home">Home</router-link>
    <!-- 渲染结果 -->
    <a href="home">Home</a>
    
    <!-- 使用 v-bind 的 JS 表达式 -->
    <router-link v-bind:to="'home'">Home</router-link>
    
    <!-- 不写 v-bind 也可以,就像绑定别的属性一样 -->
    <router-link :to="'home'">Home</router-link>
    
    <!-- 同上 -->
    <router-link :to="{ path: 'home' }">Home</router-link>
    
    <!-- 命名的路由 -->
    <router-link :to="{ name: 'user', params: { userId: 123 }}">User</router-link>
    
    <!-- 带查询参数,下面的结果为 /register?plan=private -->
    <router-link :to="{ path: 'register', query: { plan: 'private' }}">Register</router-link>
  • replace

    设置 replace 属性的话,当点击时,会调用 router.replace() 而不是 router.push(),导航后不会留下 history 记录。

    html 复制代码
    <router-link :to="{ path: '/abc'}" replace></router-link>
  • append

    设置 append 属性后,则在当前 (相对) 路径前添加其路径 。例如,我们/a 导航到一个相对路径 b,如果没有配置 append,则路径为 /b,如果配了,则为 /a/b

    html 复制代码
    <router-link :to="{ path: 'relative/path'}" append></router-link>
  • tag

    有时候想要 <router-link> 渲染成某种标签,例如 <li>。 于是我们使用 tag prop 类指定何种标签,同样它还是会监听点击,触发导航

    html 复制代码
    <router-link to="/foo" tag="li">foo</router-link>
    <!-- 渲染结果 -->
    <li>foo</li>
  • active-class

    设置 链接激活时使用的 CSS 类名。可以通过以下代码来替代。注意这里 class 使用 active-class="_active"

    html 复制代码
    <style>
       ._active{
          background-color : red;
       }
    </style>
    <p>
       <router-link v-bind:to = "{ path: '/route1'}" active-class = "_active">Router Link 1</router-link>
       <router-link v-bind:to = "{ path: '/route2'}" tag = "span">Router Link 2</router-link>
    </p>
  • exact-active-class

    配置当链接被精确匹配的时候应该激活的 class。可以通过以下代码来替代。

    html 复制代码
    <p>
       <router-link v-bind:to = "{ path: '/route1'}" exact-active-class = "_active">Router Link 1</router-link>
       <router-link v-bind:to = "{ path: '/route2'}" tag = "span">Router Link 2</router-link>
    </p>
  • event

    声明可以用来触发导航的事件。可以是一个字符串或是一个包含字符串的数组。

    如:设置了 event 为 mouseover ,及在鼠标移动到 Router Link 1 上时导航的 HTML 内容会发生改变。

    html 复制代码
    <router-link v-bind:to = "{ path: '/route1'}" event = "mouseover">Router Link 1</router-link>
相关推荐
码蜂窝编程官方9 分钟前
【含开题报告+文档+PPT+源码】基于SpringBoot+Vue的虎鲸旅游攻略网的设计与实现
java·vue.js·spring boot·后端·spring·旅游
乐闻x1 小时前
Vue.js 性能优化指南:掌握 keep-alive 的使用技巧
前端·vue.js·性能优化
533_2 小时前
[vue] 深拷贝 lodash cloneDeep
前端·javascript·vue.js
ZBY520313 小时前
【Vue】 npm install amap-js-api-loader指南
javascript·vue.js·npm
计算机毕设指导63 小时前
基于 SpringBoot 的作业管理系统【附源码】
java·vue.js·spring boot·后端·mysql·spring·intellij-idea
木子02044 小时前
前端VUE项目启动方式
前端·javascript·vue.js
运维-大白同学5 小时前
将django+vue项目发布部署到服务器
服务器·vue.js·django
星星会笑滴7 小时前
vue+node+Express+xlsx+emements-plus实现导入excel,并且将数据保存到数据库
vue.js·excel·express
Backstroke fish7 小时前
Token刷新机制
前端·javascript·vue.js·typescript·vue
临枫5417 小时前
Nuxt3封装网络请求 useFetch & $fetch
前端·javascript·vue.js·typescript