簡體   English   中英

Vue.js/Laravel:如何在多個組件之間傳遞數據

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM