有没有办法让同一单个文件组件的多个实例共享数据,而不需要通过总线或事件传递数据?
我的意思是,对于data部分来说,这是唯一一个声明为函数的部分,实际上所有其他部分都是在实例之间共享的,对吧?
我想要的是一些像static变量的PHP或C类。
我的特定用例
我有一个基于vue库(来自Element UI的Carousel)的组件的单个文件组件,它需要将其高度定义为prop,但是我的包装器组件的每个实例都有不同高度的不同内容。
我想要做的是让每个实例检查它的内容高度,找到最大值并设置包装的旋转木马的高度。
为此,我可以按类检索dom元素,并使用js检查最大的高度,但我需要确保每个实例只检索自己的内容,而不是其他的内容,所以我希望有一些类似于共享计数器的东西,让每个实例在其created方法`中递增这个计数器,并使用它来生成自己的id。
这个是可能的吗?
如果没有,有没有其他方法?我希望避免仅仅为了这个目的而给每个实例传递一个道具。
发布于 2020-03-27 19:08:27
答案1
使用Vuex https://vuex.vuejs.org/,这是官方的Vue状态管理包。
答案2
自己创建一个简化版本,如下所示:
import Vue from 'vue';
Vue.prototype.$state = {
shared_variable: false,
some_counter: 15
};
Vue.mixin({
data() {
return {
$state: Vue.prototype.$state
}
}
});
window.Vue = new Vue({
...
});然后,您可以简单地在您的组件中引用this.$state。
如果你想查看这些状态变量中的任何一个,你可以这样做:
// Some component.
export default {
...
watch: {
'$state.shared_variable': function(newVal, oldVal) {
// Do stuff on change.
}
}
}这个示例可能会被简化,但这是我很长一段时间以来一直使用它的方式。
发布于 2020-03-27 17:38:05
对我的特定用例的回答
我不知道vue $el:它为我的组件实例提供了特定的根dom元素,因此不需要使用共享数据以编程方式生成不同的ids。
然而,他没有回答关于在组件实例之间共享数据的原始问题。
https://stackoverflow.com/questions/60882924
复制相似问题