You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vue单页应用如何将路由页数据传递至router-view所属父组件

Vue跨层级组件传值问题:如何将Page.vue的选中图片索引传递到上层App.vue

项目结构

|- App.vue
|- + Views  
|  |- Page.vue  
|- + Components  
|  |- Slider.vue  

场景说明

App.vue包含负责路由渲染Page.vue的router-view容器,Slider.vue是App.vue的公共子组件。为了实现Slider组件的复用解耦,需要将用户在Page.vue点击的图片索引、全量图片数据从Page.vue传递给App.vue,再透传到Slider.vue。
此前已尝试params、props、emit方案均未成功,Page.vue基础代码如下:

<template>
    <div v-for="(item, index) in 3" :key="index"></div>
</template>

<script>
export default ({
    data() {
        return {
            urls: ['url1', 'url2', 'url3']
        }
    }
})
</script>

已验证解决方案(感谢@gengar.value)

通过路由传参作为公共数据载体,无需经过App.vue中转,直接在Slider.vue监听路由参数变化即可实现需求,实现代码如下:

Page.vue 触发传参代码

methods: {
    passIndex: function (index) {
      this.$router.push({
        name: "visualization",
        params: { imgCat: "visualization", imgIndex: index },
      });
    },
  }

Slider.vue 监听参数代码

watch: {
    "$route.params.imgCat": function (val) {
      this.state = val;
    },
    "$route.params.imgIndex": function (newVal) {
      if (newVal != -1) this.imgState = newVal;
      this.$router.push({ params: { imgIndex: -1 } });
    }
}

内容的提问来源于stack exchange,提问作者Mimayuki

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 14:45:04