3-1-vue框架-官方路由-vue router

介绍

Vue Router 是 Vue.js 的官方路由。它与 Vue.js 核心深度集成,让用 Vue.js 构建单页应用变得轻而易举。功能包括:
官方文档:https://router.vuejs.org/zh/guide/

下载

npm install vue-router@4

yarn add vue-router@4

入门

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

案例

第一步:先启动一个vue3的项目,然后index.html不要动

第二步:把main.js改成这个样子

// import './assets/main.css'

import { createApp } from 'vue'
import { createRouter, createWebHashHistory } from 'vue-router'
import App from './App.vue'

// createApp(App).mount('#app')


// 1. 定义路由组件.
// 也可以从其他文件导入
const Home =  { render(){ return 'Home'} }
const About =  { render(){ return 'About'} }

// 2. 定义一些路由
// 每个路由都需要映射到一个组件。我们后面再讨论嵌套路由。
const routes = [
  { path: '/', component: Home },
  { path: '/about', component: About },
]

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

// 5. 创建并挂载根实例
// 创建一个vue应用,将App组件和定义的路由放入到vue应用,并挂载到模板页面id为app的元素上。
const app = createApp(App)
app.use(router)
app.mount('#app')

// 现在,应用已经启动了!

第三步:App.vue改成这样

<template>
  <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>
</template>
<script>
export default {

}
</script>
  • 注意:是用来展示路由对应的组件UI的。

router-link的使用

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

router-link属性值详解

:to 属性值

这个属性值就相当于a标签中的"herf"属性,后面的内容为跳转链接的内容

<router-link :to="http://www.baidu.com/">百度</router-link>

相当于

<a href="http://www.baidu.com/">百度</a>

vue中有多少种跳转,js也可以单独实现点击方法来跳转,这个也要会,

        <template slot-scope="{row}">
          <a :href="'http://127.0.0.1:5000'+row.testReportUrl" target="_blank">{{ 'http://127.0.0.1:5000'+row.testReportUrl }}</a>

        </template>

router-view

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

动态路由

带参数的动态路由匹配

很多时候,我们需要将给定匹配模式的路由映射到同一个组件。例如,我们可能有一个 User 组件,它应该对所有用户进行渲染,但用户 ID 不同。在 Vue Router 中,我们可以在路径中使用一个动态字段来实现,我们称之为 路径参数 :

const User = {
  template: '<div>User</div>',
}

// 这些都会传递给 `createRouter`
const routes = [
  // 动态字段以冒号开始
  { path: '/users/:id', component: User },
]

现在像 /users/johnny 和 /users/jolyne 这样的 URL 都会映射到同一个路由。

路径参数 用冒号 : 表示。当一个路由被匹配时,它的 params 的值将在每个组件中以 this.$route.params 的形式暴露出来。因此,我们可以通过更新 User 的模板来呈现当前的用户 ID:

const User = {
  template: '<div>User {{ $route.params.id }}</div>',
}

你可以在同一个路由中设置有多个 路径参数,它们会映射到 $route.params 上的相应字段。例如:

匹配模式 匹配路径 $route.params
/users/:username /users/eduardo { username: 'eduardo' }
/users/:username/posts/:postId /users/eduardo/posts/123 { username: 'eduardo', postId: '123' }
除了 $route.params 之外,$route 对象还公开了其他有用的信息,如 $route.query(如果 URL 中存在参数)、$route.hash 等。

2. vue router携带query参数

      <el-table-column label="报告地址" min-width="150px">
        <template slot-scope="{row}">
          <router-link :to="{
        path: '/report/webReportList',
        query: {
                id: row.id
        }
}">报告详情</router-link>
        </template>
      </el-table-column>
  • 主要to前面要有冒号

vue 返回上一页有两种方法:

如果使用的是 vue-router ,this.$router.go(-1) 就可以回到上一页。
history.go(-1) 是回到浏览器上一页。

// 跳转到一个新页面
this.$router.push('/about')
// 返回到之前的页面
this.$router.back()

// 后退一次
this.$router.go(-1)
// 前进一次
this.$router.go(1)

posted @ 2022-06-06 15:19  技术改变命运Andy  阅读(45)  评论(0编辑  收藏  举报