在es6模块之间共享数据

时间:2015-06-20 16:57:09

标签: module global-variables sharedpreferences ecmascript-6

是否存在es6模块(jspm / system.js和babel)可以相互共享数据的地方(不是窗口):?

Ex:我有一个用于http查询字符串的解析器模块。我在启动时使用它来选择运行哪个程序(一个运行许多程序的html文件)。我还在选定的程序中使用它来获取运行它的标志值。例如:三角形或正方形,它们的数量,世界坐标系......等等。

如何在启动模块和需要标志数据的各种模块之间共享查询字符串解析的结果?是否有特殊的"出口"模块的数据空间?

我可以重新解析,没什么大不了的,但在将来,我可能希望存储长计算的结果,以便可以共享它们。我也可以将数据传递给" init"程序,但这可能很尴尬。

2 个答案:

答案 0 :(得分:3)

如果您正在考虑从一个模块向全局变量传递数据并从中读取另一个模块,这里是一个简单数据存储模块的示例。

SimpleStore.js中的

var _store = {};

class SimpleStore {
   constructor(props) {
      if (props) { 
         _store = props;
      }
    }
    getContent() {
        return _store;
    }
}
export default SimpleStore

在模块A中我们会存储一些东西

import SimpleStore from './SimpleStore'

class A {
    constructor(props) {
        new SimpleStore({foo: 'bar'});
    }
}

在模块B中,我们将获得该内容

import SimpleStore from './SimpleStore'

class B {
    constructor(props) {
        var content = new SimpleStore().getContent();
    }
}

请记住,在实例化SimpleStore时,您可以轻松更改_store的内容。 new SimpleStore('replace the original content')

这就像IMMUTABLE.js之类的图书馆一样有用。另外,请查看与React FluxRedux

一起使用的商店模块

答案 1 :(得分:1)

你应该制作第3个“配置”模块,比如“C”,这样“A”和“B”都依赖于它。该模块将配置数据加载/缓存/公开给其他模块。