[英]Vue.js/Laravel: How to pass data between multiple components
require('./bootstrap');
window.Vue = require('vue');
Vue.component('exampleComponent1', require('./components/exampleComponent1.vue'));
Vue.component('exampleComponent2', require('./components/exampleComponent2.vue'));
const app = new Vue({
el: '#app'
});
從上面的代碼中,我想在exampleComponent1
中發生某些event
時將數據從exampleComponent1
傳遞給exampleComponent2
。
什么是最佳解決方案?
這里的關鍵是將它們的parent
組件設置為從第一個接收(使用emit
)並發送到第二個(使用props
)的組件:
const component1 = Vue.component('component1', { template: '#component1', data() { return { name: '' } }, methods: { updateName() { this.$emit("namechanged", this.name); } } }); const component2 = Vue.component('component2', { template: '#component2', props: ['name'], }); new Vue({ el: "#app", components: { component1, component2 }, data() { return { name: '' } }, methods: { updateName(newName) { this.name = newName; } } });
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script> <div id="app"> <div><component1 @namechanged="updateName"/></div> <div><component2:name="name"/></div> </div> <template id="component1"><input v-model="name" @input="updateName"/></template> <template id="component2"><p>Input From component 1: {{name}}</p></template>
您可以為此使用事件總線。
// in some global file
const EventBus = new Vue();
// creating or emitting event
EventBus.$emit('someEvent', 'some-data')
// listen to the event
EventBus.$on('someEvent', function(data) {
console.log(data) // 'some-data
})
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.