我有两个组件,我想显示用户在另一个组件上输入的内容。我真的不希望使用状态管理器一样vuex,因为它可能是一个有点矫枉过正,因为它是一个小的应用程序Vue.js中的事件总线没有更新我的组件
这是我main.js:发出呼吁addHtml事件
import Vue from 'vue'
import App from './App.vue'
import VueRouter from 'vue-router';
import { routes }from './routes';
export const EventBus = new Vue();
Vue.use(VueRouter);
const router = new VueRouter({
routes,
mode: 'history'
});
new Vue({
el: '#app',
router,
render: h => h(App)
})
组件。 VUE
<template>
<div>
<h1>Add HTML</h1>
<hr>
<button @click="navigateToHome" class="btn btn-primary">Go to Library</button>
<hr>
Title <input type="text" v-model="title">
<button @click="emitGlobalClickEvent()">Press me</button>
</div>
</template>
<script>
import { EventBus } from '../../main.js'
export default {
data: function() {
return {
title: ''
}
},
methods: {
navigateToHome() {
this.$router.push('/');
},
emitGlobalClickEvent() {
console.log(this.title);
EventBus.$emit('titleChanged', this.title);
}
}
}
</script>
侦听事件的文件多数民众赞成发射并显示什么其他组件上输入:
<template>
<div>
<h1>Existing Items</h1>
<hr>
<p>{{ test }}</p>
</div>
</template>
<script>
import { EventBus } from '../main.js';
export default {
data: function() {
return {
test: ''
}
},
created() {
EventBus.$on('titleChanged', (data) => {
console.log('in here!',data);
this.test = data;
});
}
}
</script>
console.log('in here!',data);
里面的监听器被打印出来给控制台,所以我知道它正在拾取它,但{{ test }}
不会更新到用户输入的内容,当我单击回组件以查看它是否已更新时,它只会保留空白?有任何想法吗?
也许它就像莱纳说,因为组件被破坏:如果你想保持只有一个特定的组件/页的状态,你可以使用 router-view> 。 https://vuejs.org/v2/guide/components.html#keep-alive –
include
标签。尝试将'router-view'封装在'keep-alive'内:'神奇的做到了这一点,它的工作原理,它每次都被破坏并被重置!谢谢,如果你将它作为答案发布,我会将其标记为正确 – Opt3