Angular 8 中使用服务数据的最佳做法是什么?
What is the best practice in Angular 8 to consume data from service?
我有一个应用程序,所有状态管理架构都是作为 Observable Data Services 实现的。我想弄清楚的是,创建可通过服务使用的共享列表和词典的最佳方式是什么。我知道这听起来很简单 - 但由于我是 Angular 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);
});
}
}
现在,我不确定这是正确的方法 - 因为逻辑似乎在组件和服务中重复......(我在这里可能是错的......)只是为了详细说明 - 用户列表应该是一个静态数据,应该只实例化一次。
关于如何在 Angular 中处理组件之间的数据的答案是:使用服务
https://angular.io/guide/architecture-services
angular 团队维护了一个名为 Tour of heroes, where they provide developers with a great intro to the angular architecture and its main data workflows. I specially recommend people to finish the last chapter 的非常好的教程,它是关于数据处理的。
总而言之,为了回答您的问题,您不应从该服务订阅对端点的调用。在您的服务中,创建如下函数:
...
public getUsers(){
return this.http.get(‘/users’)
}
...
在您的组件中,您可以像这样创建 Observables 服务数据:
export class UsersComponent implements OnInit {
...
public usersList$ = this.apiService.getUsers();
...
}
及其组件模板(注意那里的 async pipe),angular 将在您使用适当的管道时为您进行订阅:
(我假设你的用户模型有一个名字和电子邮件属性,只是为了显示数据)
<div *ngFor="let user of usersList$ | async">
<div> {{ user.name }} </div>
<div> {{ user.email }} </div>
</div>
我有一个应用程序,所有状态管理架构都是作为 Observable Data Services 实现的。我想弄清楚的是,创建可通过服务使用的共享列表和词典的最佳方式是什么。我知道这听起来很简单 - 但由于我是 Angular 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);
});
}
}
现在,我不确定这是正确的方法 - 因为逻辑似乎在组件和服务中重复......(我在这里可能是错的......)只是为了详细说明 - 用户列表应该是一个静态数据,应该只实例化一次。
关于如何在 Angular 中处理组件之间的数据的答案是:使用服务
https://angular.io/guide/architecture-services
angular 团队维护了一个名为 Tour of heroes, where they provide developers with a great intro to the angular architecture and its main data workflows. I specially recommend people to finish the last chapter 的非常好的教程,它是关于数据处理的。
总而言之,为了回答您的问题,您不应从该服务订阅对端点的调用。在您的服务中,创建如下函数:
...
public getUsers(){
return this.http.get(‘/users’)
}
...
在您的组件中,您可以像这样创建 Observables 服务数据:
export class UsersComponent implements OnInit {
...
public usersList$ = this.apiService.getUsers();
...
}
及其组件模板(注意那里的 async pipe),angular 将在您使用适当的管道时为您进行订阅: (我假设你的用户模型有一个名字和电子邮件属性,只是为了显示数据)
<div *ngFor="let user of usersList$ | async">
<div> {{ user.name }} </div>
<div> {{ user.email }} </div>
</div>