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

How to share data between different modules in requirejs, javascript

本文关键字:模块 之间 数据 共享 requirejs javascript      更新时间:2023-09-26

我想在不同的模块之间共享一些数据,方法是创建一个模块,例如dataService,在其中放入一个变量,然后将该模块作为依赖项插入其他模块中。这是代码(不起作用):

define('dataService', function () {
    var quotes = [];
    return {
    quotesArray: quotes,
        };
});
require(['dataService'], function (dataService) {
     dataService.quotesArray {1, 2, 3};  // setting the quotes variable
});
define('otherModule', ['dataService'], function (dataService) {
     var x = dataService.quotesArray; // x = empty Array, why?
});

以下是解决方法:

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]
});

这是一把正在工作的小提琴:http://jsfiddle.net/kmturley/aHgMJ/