在角度8中,从服务使用数据的最佳实践是什么? [英] What is the best practice in Angular 8 to consume data from service?

查看:18
本文介绍了在角度8中,从服务使用数据的最佳实践是什么?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个应用程序,所有的状态管理架构都是作为可观察的数据服务实现的。我试图弄清楚的是,创建共享列表和词典的最佳方式是什么,这些共享列表和词典将通过服务提供。我知道这听起来很简单--但由于我是角度8的新手--我仍然不能理解rxjs的所有最佳实践。

为了说明我的问题-这里是一个服务,一个用户列表,我希望它只使用一次数据(作为单一实例),并能够通过组件轻松获取

export class ApiService {

 public users =  new BehaviorSubject<any>({‘users’: []});

 constructor(private http: HttpClient}

 public getUsers(){
   return this.http.get(‘/users’).subscribe((res)=>{this.users.next(res)})
 }
}

下面是我使用用户列表的方式

export class UsersComponent implements OnInit {

public usersList: BehaviorSubject<any>;

  constructor(public apiService:ApiService) {

    this.usersList = new BehaviorSubject<any>([]);
    this.apiService.users.subscribe((value: any) => {
           
      this.usersList.next(value);
     
    });
  }
}
现在,我不确定这是不是正确的方式--因为逻辑似乎在组件和服务中都重复了……(在这一点上我可能错了……)更详细地说,用户列表应该是一个静态数据,应该只实例化一次。

推荐答案

对于如何处理角度组件之间的数据,答案是:使用服务

https://angular.io/guide/architecture-services

ANGLE团队维护了一个名为Tour of heroes的非常好的教程,在该教程中,他们为开发人员提供了对ANGLE体系结构及其主要数据工作流的很好的介绍。我特别推荐大家完成last chapter,这是关于数据处理的。

要回答您的问题,总而言之,您不应该从服务订阅到端点的调用。在您的服务中,创建如下函数:

...
public getUsers(){
   return this.http.get(‘/users’)
 }
...

在您的组件中创建服务数据的Observables如下:

export class UsersComponent implements OnInit {
...
public usersList$ = this.apiService.getUsers();

...
}

并且在其组件模板上(请注意那里的async pipe),当您使用适当的管道时,ANGLE将为您进行订阅: (我假设您的用户模型上有姓名和电子邮件属性,只是为了显示数据)

<div *ngFor="let user of usersList$ | async">
  <div> {{ user.name }} </div>
  <div> {{ user.email }} </div>
</div>

这篇关于在角度8中,从服务使用数据的最佳实践是什么?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆