Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/407.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在requirejs、javascript中的不同模块之间共享数据_Javascript_Module_Requirejs - Fatal编程技术网

如何在requirejs、javascript中的不同模块之间共享数据

如何在requirejs、javascript中的不同模块之间共享数据,javascript,module,requirejs,Javascript,Module,Requirejs,我想通过创建一个名为instancedataService的模块,在不同模块之间共享一些数据,在其中放入一个变量,然后将此模块作为依赖项插入其他模块中。以下是代码(不起作用): 以下是解决方法: define('dataService', function () { var quotes = []; var getQuotes = function () { return quotes; }; var setQuotes = func

我想通过创建一个名为instance
dataService
的模块,在不同模块之间共享一些数据,在其中放入一个变量,然后将此模块作为依赖项插入其他模块中。以下是代码(不起作用):

以下是解决方法:

define('dataService', function () {
    var quotes = [];
    var getQuotes = function () {       
        return quotes;
    };
    var setQuotes = function (newQuotes) {
        quotes = newQuotes;
    };
    return {
        getQuotes: getQuotes,
    };
});

require(['dataService'], function (dataService) {
    var x = dataService.getQuotes();  // now I can get/set the quotes variable
    dataService.setQuotes();
});
我只是想知道,这是否是一个适当的方式,使一些数据可以在不同的模块


为什么第一个选项不起作用?

要使其起作用,您需要创建两个选项的实例,以便其中一个选项覆盖另一个选项的属性:

define('Quotes', function (Module) {
    return {
        quotesArray: ['a', 'b', 'c']
    };
});

define('Service', ['Quotes'], function (quotes) {
    console.log(1, quotes.quotesArray); // ["a", "b", "c"]
    quotes.quotesArray = [1, 2, 3];
});

require(['Service', 'Quotes'], function(service, quotes) {
    console.log(2, quotes.quotesArray); // [1, 2, 3]
});
这是一把小提琴:

正如这把小提琴所示,第一件作品的可能复制品如预期效果一样。你的设置一定有问题。这真的是您使用的代码,还是一个简化的示例。@Andreas Köberle,对不起,无法打开小提琴。这与我正在使用的代码大致相同。正如我所说,您的示例代码运行良好。大多数情况下,所需模块未定义时,模块之间存在循环引用。第一个模块也需要第二个模块。@Andreas Köberle,对不起,我弄错了。请重读这个问题。我可以查询dataService.quotesArray,但是如果我在一个模块中设置它,然后在另一个模块中查询dataService.quotesArray,我会得到一个空数组,似乎我没有在第一个模块中设置quotes var依赖项加载异步,没有任何顺序,而是在order-service-quotes中执行?顺序是:quotes模块已定义,定义服务模块,服务模块加载报价模块并覆盖值,加载服务和报价模块并注销值
define('Quotes', function (Module) {
    return {
        quotesArray: ['a', 'b', 'c']
    };
});

define('Service', ['Quotes'], function (quotes) {
    console.log(1, quotes.quotesArray); // ["a", "b", "c"]
    quotes.quotesArray = [1, 2, 3];
});

require(['Service', 'Quotes'], function(service, quotes) {
    console.log(2, quotes.quotesArray); // [1, 2, 3]
});