如何在聚合物中创建静态对象

时间:2018-04-20 06:20:22

标签: javascript polymer web-component polymer-2.0

我有以下用例。

我的网络项目中的根文件是index.html。我想创建一个存储用户信息的对象,以便可以从项目中的任何聚合物Web组件访问它,而无需将其明确地传递给任何Web组件。可以这样做吗?这类似于许多面向对象编程语言的Singleton方法。 谢谢。

2 个答案:

答案 0 :(得分:0)

如果您希望任何/所有组件能够访问相同的数据,那么您必须将其设为全局:

window.myData = {};

但在很多层面上这是一个糟糕的主意。

这会将您的所有组件绑定到此数据结构和位置。除非他们愿意管理完全相同的数据结构,否则没有其他人也没有其他应用程序可以使用这些组件。

相反,您需要将所需数据传递到每个组件中。是的,这是更多的工作,但它允许组件在任何地方使用。

如果组件在每种情况下每次都需要获得 EXACT 相同的数据,那么您可以让组件收集数据。

如果数据需要能够来自不同的端点(基于应用程序),那么您需要为组件提供定义其URL的能力。这很像<img>标记。它具有src属性。当然,<img>标记仅显示图像并始终显示图像,但<img>标记的用户可以设置src属性或属性,以告知标记在何处获取图像数据。

答案 1 :(得分:0)

iron-meta元素是为此而设计的,但该元素基本上只是将内容保存到内存中。只需看看元素的作用:

Polymer.IronMeta.getIronMeta = function getIronMeta() {
   if (singleton === null) {
     singleton = new Polymer.IronMeta();
   }
   return singleton;
 };

所以我会继续使用已经建议的解决方案:

 window.myData = {};