我有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>
Run Code Online (Sandbox Code Playgroud)
get-users组件:
<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>
Run Code Online (Sandbox Code Playgroud)
Vue实例/ decalaration
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 },
})
Run Code Online (Sandbox Code Playgroud)
由于show-results组件不是父/子关系的一部分,我无法使用API的$ broadcast或$ dispatch方法.
是否可以在ajax承诺完成时将数据从一个组件传递到另一个组件?
kak*_*oni 11
使用Vue 2.0时,由于广播已被弃用,因此情况略有不同. Vue文档讨论了使用集中式事件总线来实现这一目标.这就是你如何做到的;
定义集中式事件中心.所以在你的Vue实例/ decalaration中定义
const eventHub = new Vue() // Single event hub
// Distribute to components using global mixin
Vue.mixin({
data: function () {
return {
eventHub: eventHub
}
}
})
Run Code Online (Sandbox Code Playgroud)现在在您的组件中,您可以发布事件
this.eventHub.$emit('show-results:users', { users: response.data.users })
Run Code Online (Sandbox Code Playgroud)并且倾听你的意思
this.eventHub.$on('show-results:users', data => {
// do your thing
})
Run Code Online (Sandbox Code Playgroud)注意:此答案仅对 vue 1 有效
例如,您可以从根 Vue 实例进行广播。this.$root
使您可以访问当前 vue 实例中的根组件。因此它将到达它的孩子:
<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;
this.$root.broadcast('show-results:users', { users: response.data.users });
})
}
}
}
</script>
Run Code Online (Sandbox Code Playgroud)
show-results:users
然后您在组件中监听该事件show-results
:
events: {
'show-results:users': function(data) {
// do your stuff here
}
}
Run Code Online (Sandbox Code Playgroud)
当然,您可以为该事件指定任何您想要的名称。
归档时间: |
|
查看次数: |
4456 次 |
最近记录: |