I want to share some data between different modules by creating one module, called for instance dataService
, put a variable into it, and then insert this module in other modules as a dependency. Here is the code (that doesn't work):
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?
});
Here is the workaround:
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();
});
I'm just wondering if it is a proper way to make some data be accessible in different modules?
And why first option doesn't work?
To make this work you need to create an instance of both, so one overwrites the properties of the other:
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]
});
Here's a working fiddle: http://jsfiddle.net/kmturley/aHgMJ/
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With