在 UniApp 中,组件之间的数据共享可以通过以下几种方式实现:
<!-- 父组件 -->
<template>
<ChildComponent :parentData="data" @childEvent="handleChildEvent" />
</template>
<script>
export default {
data() {
return {
data: 'Shared Data'
};
},
methods: {
handleChildEvent(value) {
console.log('Data received from child:', value);
}
}
};
</script>
<!-- 子组件 -->
<template>
<button @click="sendToParent">Send to Parent</button>
</template>
<script>
export default {
props: ['parentData'],
methods: {
sendToParent() {
this.$emit('childEvent', 'Data from child');
}
}
};
</script>
// store.js
import Vue from 'vue';
import Vuex from 'vuex';
Vue.use(Vuex);
export default new Vuex.Store({
state: {
sharedData: 'Initial Shared Data'
},
mutations: {
updateSharedData(state, payload) {
state.sharedData = payload;
}
},
actions: {
changeSharedData({ commit }, payload) {
commit('updateSharedData', payload);
}
}
});
<!-- 在任何组件中 -->
<template>
<div>{{ sharedData }}</div>
</template>
<script>
export default {
computed: {
sharedData() {
return this.$store.state.sharedData;
}
},
methods: {
updateSharedData() {
this.$store.dispatch('changeSharedData', 'New Shared Data');
}
}
};
</script>
<!-- 祖先组件 -->
<script>
export default {
provide() {
return {
sharedData: this.sharedData
};
},
data() {
return {
sharedData: 'Shared Data'
};
}
};
</script>
<!-- 后代组件 -->
<script>
export default {
inject: ['sharedData'],
mounted() {
console.log(this.sharedData); // 'Shared Data'
}
};
</script>
// eventBus.js
import Vue from 'vue';
export const EventBus = new Vue();
<!-- 组件 A -->
<script>
import { EventBus } from './eventBus.js';
export default {
methods: {
sendMessage() {
EventBus.$emit('custom-event', 'Hello from Component A');
}
}
};
</script>
<!-- 组件 B -->
<script>
import { EventBus } from './eventBus.js';
export default {
created() {
EventBus.$on('custom-event', this.handleCustomEvent);
},
methods: {
handleCustomEvent(message) {
console.log(message); // 'Hello from Component A'
}
},
beforeDestroy() {
EventBus.$off('custom-event', this.handleCustomEvent);
}
};
</script>
选择哪种方法取决于你的应用结构和需求。对于简单的父子组件通信,props 和 events 就足够了。对于更复杂的全局状态管理,Vuex 是更好的选择。Provide / Inject 适用于深层次的组件通信,而全局事件总线则适用于任何组件间的通信,但可能会导致难以追踪的事件流。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。