gpt4 book ai didi

vue.js - Vue中如何在非父子组件之间共享数据

转载 作者:搜寻专家 更新时间:2023-10-30 22:08:59 25 4
gpt4 key购买 nike

我有 3 个组件(get-users、get-projects、get-tasks)——每个组件都包含一个按钮,该按钮触发 ajax 请求以检索一些数据。我希望从 ajax 请求返回的数据显示在页面上的第四个独立组件 (show-results) 中。例如

<div class="row">
<div class="col-md-6>
<get-users></get-users>
<get-projects></get-projects>
<get-tasks></get-tasks>
</div>
<div class="col-md-6>
<show-results></show-results>
</div>
</div>

获取用户组件:

<script>
export default {
template: require('./get_users.template.html'),

data: function() {
return {
userList: ''
}
},

methods: {
getUsers(e) {
e.preventDefault();

this.$http.get('api/getusers').then(function (response) {
this.userList = response.data.users; // How can I also pass this to the show-results component?
})
}
}
}
</script>

Vue 实例/声明

var Vue = require('vue');

Vue.use(require('vue-resource'));

import getUsers from './components/get_users.vue';
import getProjects from './components/get_projects.vue';
import getTasks from './components/get_tasks.vue';
import showResults from './components/show_results.vue';


new Vue ({
el: '#app',

components: { GetUsers, GetProjects, GetTasks, ShowResults },

})

由于显示结果组件不是父/子关系的一部分,我不能使用 API 的 $broadcast 或 $dispatch 方法。

是否可以在 ajax promise 完成时将数据从一个组件传递到另一个组件?

最佳答案

在 Vue 2.0 中,事情有点不同,因为广播已被弃用。 Vue documentation谈论使用集中式事件总线来完成此任务。您可以这样做;

  1. 定义集中式事件中心。所以在你的 Vue 实例/声明中定义

     const eventHub = new Vue() // Single event hub

    // Distribute to components using global mixin
    Vue.mixin({
    data: function () {
    return {
    eventHub: eventHub
    }
    }
    })
  2. 现在在您的组件中,您可以使用

    发出事件
     this.eventHub.$emit('show-results:users', { users: response.data.users })
  3. 听你说

     this.eventHub.$on('show-results:users', data => {
    // do your thing
    })

关于vue.js - Vue中如何在非父子组件之间共享数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34925841/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com