在Angular 5中保留类的实例

在Angular 5中保留类的实例,angular,typescript,angular5,Angular,Typescript,Angular5,真的有可能做这样的事情吗 import {Injectable} from '@angular/core'; @Injectable() export class UbiSharedService { private _ubiData: object = {}; private $$instance: UbiSharedService; constructor() { } public setData(key: string, data: an

真的有可能做这样的事情吗

import {Injectable} from '@angular/core';

@Injectable()
export class UbiSharedService {

    private _ubiData: object = {};

    private $$instance: UbiSharedService;

    constructor() {

    }

    public setData(key: string, data: any) {
        this._ubiData[key] = data;
    }

    public getData(key: string): any {
        return this._ubiData[key];
    }

    public popData(key: string): any {
        return delete this._ubiData[key];
    }

    public getInstance(): UbiSharedService {
        if (!!this.$$instance && this.$$instance instanceof UbiSharedService) {
            //NOOP
        }
        else {
            this.$$instance = new UbiSharedService();
        }

        return this.$$instance;
    }


}

摆脱
$$instance
,而是使用构造函数将服务注入到需要它的组件中

constructor(private productService: ProductService,
                private productParameterService: ProductParameterService) { }

然后组件可以使用
productService
productParameterService
属性访问服务方法。

摆脱
$$实例
,而是使用构造函数将服务注入到需要它的组件中

constructor(private productService: ProductService,
                private productParameterService: ProductParameterService) { }

然后组件可以使用
productService
productParameterService
属性访问服务方法。

请参阅Angular的以下文档,了解如何使用服务在不相关组件之间共享数据:

通过将服务添加到组件的构造函数中,可以在组件中注入服务:

constructor(
    private ubiSharedService: UbiSharedService
) { 
   // You can now call in the methods of ubiSharedService
   // e.g.: this.ubiSharedService.setData('key', { value: 'Value' });
}

请参阅Angular的以下文档,了解如何使用服务在不相关的组件之间共享数据:

通过将服务添加到组件的构造函数中,可以在组件中注入服务:

constructor(
    private ubiSharedService: UbiSharedService
) { 
   // You can now call in the methods of ubiSharedService
   // e.g.: this.ubiSharedService.setData('key', { value: 'Value' });
}

你想达到什么目标?注入服务的标准行为将它们作为单例注入。单例的状态将在应用程序的整个生命周期内保持不变。对于角度应用程序,只要浏览器窗口打开,它就会保持不变。我正在尝试从多个组件读取/写入数据。但是,我在从组件中找到使用此方法的方法时遇到了一些问题…因此您尝试在组件中使用服务并调用此服务的方法,例如setData或getData?我想从A.component调用setData并从B.component读取相同的数据:)您试图实现什么?注入服务的标准行为将它们作为单例注入。单例的状态将在应用程序的整个生命周期内保持不变。对于角度应用程序,只要浏览器窗口打开,它就会保持不变。我正在尝试从多个组件读取/写入数据。但是我在从组件中找到使用此方法的方法时遇到了一些问题…因此您尝试在组件中使用服务并调用此服务的方法,例如setData或getData?我想从A.component调用setData并从B.component读取相同的数据:)这是我的相同建议。。。只是用一个更好的例子来展示你的特定场景。是的,我理解。事实上,我会选择你的答案,因为你先回答:)@DeborahK请为其他来这里的人更新你的答案。包括到singleton服务文档页面的链接。这也是我的建议。。。只是用一个更好的例子来展示你的特定场景。是的,我理解。事实上,我会选择你的答案,因为你先回答:)@DeborahK请为其他来这里的人更新你的答案。包括到singleton services文档页面的链接。