vue 动态路由基本使用

动态路由匹配(官方解释)

我们经常需要把某种模式匹配到的所有路由,全都映射到同个组件。例如,我们有一个 User 组件,对于所有 ID 各不相同的用户,都要使用这个组件来渲染。那么,我们可以在 vue-router 的路由路径中使用“动态路径参数”(dynamic segment) 来达到这个效果:

const User = { 
    template: '<div>User</div>'
}
const router = new VueRouter({
  routes: [
    // 动态路径参数 以冒号开头
    { path: '/user/:id', component: User }
  ]
})

现在呢,像 /user/foo 和 /user/bar 都将映射到相同的路由。

一个“路径参数”使用冒号 : 标记。当匹配到一个路由时,参数值会被设置到 this.$route.params,可以在每个组件内使用。于是,我们可以更新 User 的模板,输出当前用户的 ID:
···
const User = {
template: ‘

User {{ $route.params.id }}

}
···

你可以在一个路由中设置多段“路径参数”,对应的值都会设置到 $route.params 中。例如:

模式匹配路径$route.params
/user/:username/user/evan{ username: ‘evan’ }
/user/:username/post/:post_id/user/evan/post/123{ username: ‘evan’, post_id: ‘123’ }

除了 route.params外,route.params 外,route.paramsroute 对象还提供了其它有用的信息,例如,route.query(如果URL中有查询参数)、route.query (如果 URL 中有查询参数)、route.query(URL)route.hash 等等。你可以查看 API 文档 的详细说明。

举个栗子

模拟个场景:现在组件中写一个列表,假装他是个新闻列表,点击任意一条后,详情页面接收到我点击的是哪条,并且把我点击的那条详细信息给展示出来。
分析:那么我点击的时候需要知道点击的那条,接受的时候接收的那条,所以就需要再点击的时候传递对应点击的id 给详情页。

上代码:

模拟个列表,假如点击事件,在点击事件中传递对应的(id),模拟数据不规范,传个data,假装它是id.

在这里插入图片描述

<template>
    <div>
       nowplaying
       <ul>
           <li v-for="data in datalist" :key="data" @click="handleChnagePage(data)">{{data}}</li>
       </ul>
    </div>
</template>
<script>
export default {
  data () {
    return {
      datalist: ['111111', '222222', '333333']
    }
  },
  methods: {
    handleChnagePage (id) {
      console.log(id)
      //   1.编程式导航
      this.$router.push({
        path: `/detail/${id}`
      })
    }
  }
}
</script>

此刻点着啥反应都没,一点都不好使,啊,原来是路由中没配置动态路由,那我们现在匹配一下吧~

在这里插入图片描述

{
    path: '/detail/:myid', // detail/aa 动态路由
    component: Detail
  },

在路径上添加 /:xx
以此例子为例:路径匹配的时候就自动识别为 /detail/1,那么就完美的传过去了
我例子中写的是myid 这个是可以随便起的,只要你自己知道叫啥就行

传过去以后可以接收了吧,官方也说啦,用 $route.params接收。

在这里插入图片描述

接收

在Detail.vue,其中内容为:

<template>
    <div >
        传递来的数据是: {{ $route.params.myid }}
    </div>
</template>

如果你想在脚本(script标签)中使用这个id值,可以这么写:

this.$route.params.myid

当然也有其他的api ,可以打印this.$route看看
那么基本使用就是这样啦~

Vue中,动态路由是指路由配置中的路径能够根据用户的输入或者其他条件动态变化。这对于构建可扩展的应用非常有用,例如博客文章列表、产品详情页等场景。 Vue Router(简称Vue Router)提供了`Dynamic Segments`(动态段)的概念来处理这种需求。动态段通常包含一个冒号(`:`)和一个参数名,比如 `:id` 或 `:username`。 **设置动态路由基本步骤:** 1. **安装和引入Vue Router:** ```javascript npm install vue-router ``` 引入到你的main.js或App.vue文件中: ```javascript import Vue from 'vue' import Router from 'vue-router' Vue.use(Router) ``` 2. **创建Router实例并定义动态路由:** ```javascript const router = new Router({ routes: [ { path: '/posts/:postId', // 前缀 `/posts/` 后跟动态参数 `:postId` name: 'PostDetail', component: PostDetailComponent, }, // 其他静态路由... ] }) ``` 3. **组件接收动态参数:** 在使用这个动态路由的组件里,你可以通过props来访问这个参数,例如: ```javascript export default { props: ['postId'], // 接收 postId 参数 template: '<div>Post ID: {{ postId }}</div>', } ``` 4. **导航至动态路由:** 使用`this.$router.push()`或`this.$router.go()`,传递实际的参数值: ```javascript this.$router.push({ path: '/posts/123' }) // 带上具体 id 为123的帖子 ``` **注意事项:** - 动态路由中的参数必须由后端API支持并在调用时提供有效的值。 - 如果不希望用户提供动态路径,可以在路由守卫(如beforeEach)中进行验证和控制。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值