这是我的事件-bus.js
import Vue from 'vue';
export const EventBus = new Vue();在mediaSelectButton.js中创建的事件
<template>
<router-link :to="'/' + name + '/criterias'" v-on:click.native="selected" class="btn btn-success btn-md col-xs-12">
Выбрать
</router-link>
</template>
<script>
import { EventBus } from '../../additional/event-bus.js';
export default {
props: {
name: {
type: String,
required: true
},
media: {
type: String,
required: true
},
countLikes: {
type: Number,
required: true
},
countComments: {
type: Number,
required: true
},
text: {
type: String
},
hashTags: {
type: Array
}
},
data: ()=> {
return {
}
},
methods: {
selected: function () {
const result = {
media: this.media,
socialName: this.name,
text: this.text,
hashTags: this.hashTags,
countLikes: this.countLikes,
countComments: this.countComments
};
EventBus.$emit('selected-media', result);
}
}
}
</script>此事件侦听table.js组件。
<script>
import { EventBus } from '../../additional/event-bus';
export default {
data: () => {
return {
likeIcon: require('./likeHeart.svg'),
commentIcon: require('./comment.svg'),
countLikes: 0,
countComments: 0,
selectedMedia: '',
socialName: '',
text: '',
hashTags: [],
criteriasList: [],
pendingRequest: true,
hashTagChecked: false
}
},
beforeRouteEnter(to, from, next){
if (/^\/\w+\/medies(\/)?$/.test(from.path) || /^\/\w+\/roulette(\/)?$/.test(from.path)) {
next();
} else {
next('/');
}
},
methods: {
goBack() {
this.$route.meta.navBack = true;
window.history.length > 1
? this.$router.go(-1)
: this.$router.push('/')
},
criterias(data) {
axios.post('/api/table/get', {
social: data
})
.then(response => {
this.pendingRequest = false;
this.criteriasList = response.data;
})
.catch(e => {
this.$router.push('/');
});
}
},
created: () => {
EventBus.$on('selected-media', result => {
console.log(result) // <-- fail here!
this.selectedMedia = data.media;
this.socialName = data.socialName;
this.text = data.text;
this.hashTags = data.hashTags;
this.countLikes = data.countLikes;
this.countComments = data.countComments;
this.criterias(this.socialName);
})
}
}
</script>问题:事件中的数据被选中-媒体使用创建的 huck不来
但是,如果我听beforeRouteEnter中的事件
示例:
beforeRouteEnter(to, from, next){
if (/^\/\w+\/medies(\/)?$/.test(from.path) || /^\/\w+\/roulette(\/)?$/.test(from.path)) {
EventBus.$on('selected-media', result => {
console.log(result); // <--- It's work!
});
next();
} else {
next('/');
}
},一切都是必要的。请告诉我这里的错误在哪里,我把它嵌套在哈克创建的中。
发布于 2018-02-24 15:39:40
不确定这是否有效,但让我们试试。
由于它在beforeRouteEnter中工作,而在created钩子中不起作用,所以我认为原因是当事件发出时, 还没有创建。
使用nextTick应该可以解决这个问题。
this.$nextTick(() => {
EventBus.$emit('selected-media', result);
});https://stackoverflow.com/questions/48963226
复制相似问题