VUE之参数传递

1、嵌套路由

路由嵌套 children里面的path属性不加/杠,可以参考如下代码:

>> router/index.ts

// 创建一个路由器,并暴露出去

// 第一步:引入createRouter
import {createRouter,createWebHistory,createWebHashHistory} from 'vue-router'
// 引入一个个可能呈现组件
import Home from '@/pages/Home.vue'
import News from '@/pages/News.vue'
import About from '@/pages/About.vue'
import Detail from '@/pages/Detail.vue'
// 第二步:创建路由器
const router = createRouter({
    history:createWebHashHistory(), //路由器的工作模式
    routes:[  //一个个路由规则
        {
            path:'/home',
            component: Home
        },
        {
            path:'/news',
            component: News,
            children:[
              {
                name: 'xiangqi',
                path:'detail',
                component:Detail
              }
            ]
        },
        {
            path:'/about',
            component: About
        },
    ]
})

export default router

2、query参数

>> pages/Detail.vue

<template>
    <ul class="news-list">
        <li>编号: {
  
  {query.id}}</li>
        <li>编号: {
  
  {query.title}}</li>
        <li>编号: {
  
  {query.content}}</li>
    </ul>
</template>

<script lang="ts" setup name="Detail">
 import { toRefs } from 'vue';
 import { useRoute } from 'vue-router';
 let route = useRoute()
 //从响应式解构,会丢失响应式
 let { query } = toRefs(route)
 console.log(query)

</script>

<style scoped>
  .news-list {
    list-style: none;
    padding-left: 20px;
  }
  .news-list>li{
    line-height:30px;
  }
</style>

2.1、方法一

>> pages/News.vue

<RouterLink :to="`/news/detail?id=${news.id}&title=${news.title}&content=${news.content}`">{
  
  {news.title}}</RouterLink>

<script setup lang="ts" name="News">
import { reactive } from 'vue';
import { RouterView,RouterLink } from 'vue-router';
const newList = reactive([
  {id:'dasfadadadad01',title:'很好的抗癌食物',content:'西蓝花'},
  {id:'dasfadadadad02',title:'如何一夜暴富',content:'学IT'},
  {id:'dasfadadadad03',title:'震惊万万没想到',content:'明天周一'},
  {id:'dasfadadadad04',title:'好消息',content:'快过年了'},
  ])


</script>

2.2、方法二

<RouterLink :to="{
            path:'/news/detail',
            query:{
               id:news.id,
               title:news.title,
               content:news.content
             }
            }">
              {
  
  { news.title }}
          </RouterLink>

2.3、方法三

<RouterLink :to="{
            name:'xiangqi',
            query:{
               id:news.id,
               title:news.title,
               content:news.content
             }
            }">
              {
  
  { news.title }}
          </RouterLink>

3、params参数

 

>> router/index.ts     
   {
            path:'/news',
            component: News,
            children:[
              {
                name: 'xiangqi',
                path:'detail/:id/:title/:content?', //用于params参数占位,加?号可传可不传
                // path:'detail',
                component:Detail
              }
            ]
        },
<template>
    <div class="news">
      <!--导航区-->
       <ul>
         <li v-for="news in newList" :key="news.id">
          <!--第一种写法-->
          <!-- <RouterLink :to="`/news/detail/${news.id}/${news.title}/${news.content}`">{
  
  {news.title}}</RouterLink> -->
          <!--第二种写法-->
          <RouterLink 
            :to="{
               name:'xiangqi',
               params: {  //params不能传对象和数组
                 id:news.id,
                 title:news.title,
                 content:news.content
               }
            }">
                 {
  
  {news.title}}
          </RouterLink>
         
         </li>
       </ul>
       <!--展示区-->
       <div class="news-content">
        <RouterView/>
       </div>
    </div>
</template>

<script setup lang="ts" name="News">
import { reactive } from 'vue';
import { RouterView,RouterLink } from 'vue-router';
const newList = reactive([
  {id:'dasfadadadad01',title:'很好的抗癌食物',content:'西蓝花'},
  {id:'dasfadadadad02',title:'如何一夜暴富',content:'学IT'},
  {id:'dasfadadadad03',title:'震惊万万没想到',content:'明天周一'},
  {id:'dasfadadadad04',title:'好消息',content:'快过年了'},
  ])

</script>
### Vue.js 中使用 EventBus 进行参数传递的方法 在 Vue.js 中,`EventBus` 是一种通过中间件实现组件间通信的方式。以下是具体使用方法以及示例。 #### 方法概述 为了使不同组件之间能够相互通信,可以通过 `EventBus` 实现事件的触发和监听。主要依赖于 `$emit` 和 `$on` 两个核心方法: - **$emit(event, payload)**:用于触发指定名称的事件,并可携带数据作为第二个参数。 - **$on(event, callback)**:用于监听某个事件的发生,并执行回调函数处理逻辑[^1]。 #### 示例代码 以下是一个完整的例子展示如何利用 `EventBus` 在父组件与子组件之间进行参数传递。 ##### 步骤一:创建 EventBus 文件 定义一个独立的文件用来存储共享的 Vue 实例对象。 ```javascript // event-bus.js import Vue from 'vue'; export const EventBus = new Vue(); ``` ##### 步骤二:发送事件 (Component A) 在一个组件中调用 `$emit` 来广播自定义事件及其附带的数据。 ```javascript // ComponentA.vue <template> <button @click="sendData">Send Data</button> </template> <script> import { EventBus } from './event-bus'; export default { methods: { sendData() { let message = "Hello from Component A!"; EventBus.$emit('data-passed', message); // 发送消息给其他组件 } } } </script> ``` ##### 步骤三:接收事件 (Component B) 另一个组件设置好对应的 `$on` 监听器等待接收到的消息。 ```javascript // ComponentB.vue <template> <div>{{ receivedMessage }}</div> </template> <script> import { EventBus } from './event-bus'; export default { data() { return { receivedMessage: '' }; }, created() { EventBus.$on('data-passed', (message) => { this.receivedMessage = message; }); } } </script> ``` 以上展示了基本的操作流程,在实际开发过程中可以根据需求调整细节部分[^2]。 #### 注意事项 尽管这种方法简单易懂,但对于大型应用来说并不推荐长期采用这种方式来进行状态管理,因为随着项目的增长可能会导致难以维护的情况发生。对于更复杂的场景建议考虑 Vuex 或者 Pinia 等专门的状态管理模式[^3]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

三日沐水

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值