首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >单文件组件实例之间的共享数据

单文件组件实例之间的共享数据
EN

Stack Overflow用户
提问于 2020-03-27 17:09:28
回答 2查看 487关注 0票数 0

有没有办法让同一单个文件组件的多个实例共享数据,而不需要通过总线或事件传递数据?

我的意思是,对于data部分来说,这是唯一一个声明为函数的部分,实际上所有其他部分都是在实例之间共享的,对吧?

我想要的是一些像static变量的PHP或C类。

我的特定用例

我有一个基于vue库(来自Element UI的Carousel)的组件的单个文件组件,它需要将其高度定义为prop,但是我的包装器组件的每个实例都有不同高度的不同内容。

我想要做的是让每个实例检查它的内容高度,找到最大值并设置包装的旋转木马的高度。

为此,我可以按类检索dom元素,并使用js检查最大的高度,但我需要确保每个实例只检索自己的内容,而不是其他的内容,所以我希望有一些类似于共享计数器的东西,让每个实例在其created方法`中递增这个计数器,并使用它来生成自己的id。

这个是可能的吗?

如果没有,有没有其他方法?我希望避免仅仅为了这个目的而给每个实例传递一个道具。

EN

回答 2

Stack Overflow用户

发布于 2020-03-27 19:08:27

答案1

使用Vuex https://vuex.vuejs.org/,这是官方的Vue状态管理包。

答案2

自己创建一个简化版本,如下所示:

代码语言:javascript
运行
复制
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

如果你想查看这些状态变量中的任何一个,你可以这样做:

代码语言:javascript
运行
复制
// Some component.
export default {
    ...
    watch: {
        '$state.shared_variable': function(newVal, oldVal) {
            // Do stuff on change.
        }
    }
}

这个示例可能会被简化,但这是我很长一段时间以来一直使用它的方式。

票数 1
EN

Stack Overflow用户

发布于 2020-03-27 17:38:05

对我的特定用例的回答

我不知道vue $el:它为我的组件实例提供了特定的根dom元素,因此不需要使用共享数据以编程方式生成不同的ids。

然而,他没有回答关于在组件实例之间共享数据的原始问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60882924

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档