0
点赞
收藏
分享

微信扫一扫

Vue router路由传参


URL传参:一般用于页面跳转,将当前数据传递到新页面,例如详情页

params传参  路径包含了参数  直接在后面添加id

  • 配置路由: {path: ‘/user/:id’, component: about}   router中使用
  • 传递方式: 传递后路径:/user/6     </router-link>  中使用
  • 接收参数:$route.params.id

import { createRouter, createWebHistory } from 'vue-router'
import HomeView from '../views/HomeView.vue'   //导入组件


//定义一个routes对象
const routes = [
  {
    path: '/',
    name: 'home',
    component: HomeView
  },
  {
    path: '/about',
    name: 'about',
    // route level code-splitting
    // this generates a separate chunk (about.[hash].js) for this route
    // which is lazy-loaded when the route is visited.
    component: () => import(/* webpackChunkName: "about" */ '../views/AboutView.vue')
  },
  {
    path: '/product',
    name: 'product',
    component: () => import('../views/ProductView.vue')
  },
  {
    path: '/article_list',
    name: 'article_list',
    component: () => import('../views/ArticleListView.vue')
  },
  {
    path: '/article_detail/:id',  //它能够匹配到/article_detail/2
    name: 'article_detail',
    component: () => import('../views/ArticleDetailView.vue')
  }
]

const router = createRouter({
  history: createWebHistory(process.env.BASE_URL),
  routes
})

export default router

 ArticleDetailView.vue

<template>
  <div class="box">
    <ul>
      <li v-for="row in articleList">
         <router-link :to="'/article_detail/' + row.id">{{ row.name }}</router-link>
      </li>
    </ul>
  </div>


</template>

<script>
   export default {
    data(){
      return {
        articleList: [
          {'id': 1, "name": '这是一篇go文章'},
          {'id': 2, "name": '这是一篇k8s文章'},
          {'id': 3, "name": '这是一篇vue文章'}
        ]
      }
    }
   }
</script>

<style scoped>
  .box {
    width: 200px;
    height: 200px;
  }

</style>

ArticleListView.vue 

<template>
  <div class="box">
    <ul>
      <li v-for="row in articleList">
         <router-link :to="'/article_detail/' + row.id">{{ row.name }}</router-link>
      </li>
    </ul>
  </div>


</template>

<script>
   export default {
    data(){
      return {
        articleList: [
          {'id': 1, "name": '这是一篇go文章'},
          {'id': 2, "name": '这是一篇k8s文章'},
          {'id': 3, "name": '这是一篇vue文章'}
        ]
      }
    }
   }
</script>

<style scoped>
  .box {
    width: 200px;
    height: 200px;
  }

</style>

Vue router路由传参_Test

Vue router路由传参_vue.js_02

 

query传参  ?后面

  •  配置路由: {path: ‘/user/’, component: about}
  • 传递方式: 传递后路径:/user?id=6
  • 接收参数:$route.query.id

<template>
  <router-link to="/test?name=lucas">Test</router-link>
  <br>
  <router-link to="/helloworld">HelloWord</router-link>
  <router-view></router-view>
  <!--@是监听事件的,它就是监听childmsg的一个事件-->
  <!--<Test v-bind:name="name" :content=content  @childMsg="receive"></Test>-->
</template>

Vue router路由传参_前端_03

新的页面就可以通过$route.query.name就可以取值了。

 --------------------------------------------------------------------------------------------------------------------------------

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

<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>

router-link

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

router-view

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

JavaScript

// 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.createWebHashHistory(),
  routes, // `routes: routes` 的缩写
})

// 5. 创建并挂载根实例
const app = Vue.createApp({})
// 确保 _use_ 路由实例使整个应用支持路由。
app.use(router)

app.mount('#app')

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

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

// Home.vue
export default {
  computed: {
    username() {
      // 我们很快就会看到 `params` 是什么
      return this.$route.params.username
    },
  },
  methods: {
    goToDashboard() {
      if (isAuthenticated) {
        this.$router.push('/dashboard')
      } else {
        this.$router.push('/login')
      }
    },
  },
}

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

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

举报

相关推荐

0 条评论