Angular 5 应用程序的任何组件访问数据。正在通过身份验证服务中的 API 调用设置数据

Posted

技术标签:

【中文标题】Angular 5 应用程序的任何组件访问数据。正在通过身份验证服务中的 API 调用设置数据【英文标题】:Data accessing by any components of angular 5 application. Data is being set via a API call inside auth service 【发布时间】:2019-01-21 23:33:47 【问题描述】:

我有一个共享的身份验证服务,它由我的 Angular 5 应用程序中的所有组件注入。我的身份验证服务中的变量很少。我在身份验证服务中调用 api 并将响应值设置为变量。现在我想从我的应用程序中随时从任何组件访问这些变量的值。我不想使用本地存储或会话存储。

【问题讨论】:

【参考方案1】:

我发现在处理 HTTP 调用时,使用 Promise 更容易推理事物 - 所以我将给你一个使用 Promise 的解决方案。

class UserService 
    private userData;
    private userDataPromise;

    getUserData(...)
        if(this.userData)
            return Promise.resolve(this.userData); //if we have the data, just return it
        

        if(this.userDataPromise)
            // in case the call to the api is in progress, we don't want to make a new one.
            return this.userDataPromise;
        

        this.userDataPromise = this.http.get(...).toPromise()
                                   .then((data) => this.userData = data)
                                   .finally(() => this.userDataPromise = undefined);
        return this.userDataPromise;
    

例如,一旦用户注销,您就可以重置数据。

HTH

【讨论】:

以上是关于Angular 5 应用程序的任何组件访问数据。正在通过身份验证服务中的 API 调用设置数据的主要内容,如果未能解决你的问题,请参考以下文章

Angular 5数据从组件的一个子组件访问组件

在Angular 5中访问组件中的javascript变量

如何根据Angular中一个组件中的click事件更改其他组件中的数据?

Angular 5 socket.io 未收到其他组件中的更新

如何在 Angular 1.5 中从父控制器访问组件方法

Angular2从另一个组件访问变量