我的问题与我的Angular应用中进入浏览器一个选项卡的TypeScript单例类(用作对象的MVC模型类型)是否相同或不同,然后将同一个单例加载到同一浏览器实例的另一个选项卡中。
该实现看起来像这样(类似的想法可以用JS编写):
[TypeScript]
class Budget {
readonly name : string;
private static instance: Budget;
static getInstance(name? : string) {
if (!this.instance) {
name = name ? name : "no name";
this.instance = new Budget(name);
}
return this.instance;
}
private constructor(name : string) {
this.name = name;
}
}
在我的应用程序中,顶级“预算”对象被编写为单例,以简化对各种数据项,类实例等的访问。预算对象由大约40个其他需要相互访问的组件类组成,并且预算对象为每个类实例提供了访问其所需其他实例的方式。单例体系结构允许我编写类似Budget.getInstance()。getAccount(“ foo”)的代码,而不是在所有这些子类中维护对Budget实例的引用。事实证明,这使我写起来容易得多。
我的问题是,使用这种体系结构,用户是否可以在浏览器的不同选项卡(例如Chrome)中打开两个不同的预算,这些选项卡引用具有不同名称的不同Budget对象实例。(单例实例由Rails后端填充数据,具体取决于用户要编辑的预算。)我可以想象用户在浏览器中同时引用两个不同的预算时,在哪个位置有用,每个地方在另一个标签中。但是,如果在所有浏览器选项卡中实际上只有一个Budget对象可访问,则这是不可能的。
如果使用键从第一个选项卡中打开了第二个选项卡,则可以在选项卡之间共享JavaScript对象window.open()
。此函数返回window
打开的选项卡的对象。
尽管没有内置的Angular方法可以执行此操作,但是您可以使用本机JavaScript自己尝试:
const secondTab = window.open('', '_blank');
const obj = {};
secondTab.obj = obj;
obj.prop = 'test';
obj
,您会注意到它已被第二个标签修改如果您的问题是关于独立打开的选项卡,恐怕这是不可能的。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句