【问题标题】:Communication between Vue.js components on separate pages不同页面上的 Vue.js 组件之间的通信
【发布时间】:2020-12-16 14:26:19
【问题描述】:

我是 Vue.js 的初学者,我有一个与不在同一页面上的 Vue.js 组件之间的通信相关的问题
我的 Vue.js 应用中有多个页面,我使用路由器在它们之间导航。所以我有“主页”页面“搜索”页面用于过滤实体。
在“主页”页面上,我也有不太详细的搜索组件,我想将其用作“搜索”页面的快捷方式,因此当用户填写输入字段并单击按钮时,他的搜索参数将传递给搜索“搜索”页面和“搜索”页面上的组件,然后执行搜索。基本上,我只想将数据从“主页”页面上的快捷搜索组件发送到“搜索”页面上的搜索组件。 我尝试使用 事件总线,当单击“主页”页面上的按钮时,我会从“主页”页面搜索中发出参数:

methods:{
        searchApartments: function(){
            
            this.searchParameters.push(this.locationSearch);
            this.searchParameters.push(this.$refs.guestNumberInput.value);
            
            this.$root.$emit("searchApartmentsFromHomepage", this.searchParameters);        
            this.$root.$emit("showAppartmentPage");
        }

在“搜索”页面搜索组件上,我使用 “mounted”生命周期 hook() 来监听该事件总线。然后我会在“搜索”页面组件上设置字段(通过“v-model”绑定到“数据”中的字段)设置为我从“主页”页面获得的值强>。然后,我将使用这些值调用搜索函数:

    mounted(){
        this.$root.$on("searchApartmentsFromHomepage", (searchParameters) => {
            this.locationSearch = searchParameters[0];
            this.numberOfGuests = searchParameters[1];
            
            this.filterApartments();
        });
        
    },  

我一切正常,但“搜索”页面上的输入字段未设置为我从“主页”页面收到的值。不幸的是,即使成功传递了值,它们也不会出现在我的搜索组件的字段中,并且过滤器功能也没有从中获取任何数据...
有人知道我做错了什么吗?

【问题讨论】:

  • Home 发出searchApartment 事件时,听起来Search 组件实例尚未创建。你说input fields on "Search" page are not set to values that I have received from "Home" page.,你怎么知道the values already received from "Home" page
  • @Sphinx 我也是这么想的。但是我对 Vue.js 的了解有限,所以我找不到任何不同的方法,除了将“搜索”移动到后端并在那里发送请求......你有什么建议或可能的解决方案吗?

标签: vue.js vuejs2 components


【解决方案1】:

看起来您在Search 页面订阅之前发出了事件。

最简单的解决方案是重定向网址中的参数。

据我了解,目前您使用重定向 /home -> /search

使用搜索参数,它将是 /home -> /search?param=value&...

【讨论】:

  • 感谢您的回答!我会尝试这样做,我只需要找到如何将搜索参数添加到 URL 以及如何在Search 页面中提取它们...
  • 从您的评论看来您已经在使用 Vue Router。 router.vuejs.org/guide/essentials/navigation.html 这是页面之间导航的示例。
  • 是的,我愿意。我现在就试试。感谢您的回答!
猜你喜欢
  • 2013-11-01
  • 1970-01-01
  • 2018-02-14
  • 1970-01-01
  • 1970-01-01
  • 2020-10-30
  • 2014-12-21
  • 2018-10-05
  • 1970-01-01
相关资源
最近更新 更多