【发布时间】:2016-06-29 13:01:29
【问题描述】:
我正在尝试考虑功能反应性并将页面上的元素列表设置为流。这是使用 Angular2,但问题应该类似于任何基于流的架构。因此,我目前有两个流,初始流(从 github 获取用户列表的 http 调用)和删除用户流(单击删除用户按钮时发生)。我相信大理石图如下所示:
|[user1,user2,user3]| <--- http initial stream
|---------------------x----------x-----... <--- x denotes user removed
如何组合这些流以使其正常工作?我也在考虑以后有更多的流进行排序和排序。我会以正确的方式解决这个问题吗?这是代码(注意此代码不完整,目前 removeUser$ 不应该与 user$ 交互):
export class UserGridComponent implements OnInit {
public users$: Observable<any>;
public removeUser$: Subject;
constructor(private _githubUserService: GithubUserService) { }
ngOnInit() {
this.removeUser$ = new Subject()
.subscribe((user) => { console.log('next ' + JSON.stringify(user)});
this.users$ = this._githubUserService.getUsers()
.map((res) => res.json());
}
}
这里是Plunker
目前我只记录到控制台单击删除按钮并传递给用户。
这是显示我使用异步管道 (Angular2) 订阅 user$ 的 html 模板:
<md-list>
<h1 md-header>GitHub Users</h1>
<md-list-item *ngFor="let user of users$ | async">
<a href="https://github.com/{{user.login}}" target="_new">
<img md-list-avatar [src]="user.avatar_url">
</a>
<h4>{{user.login}}</h4>
<button md-icon-button (click)="removeUser$.next(user)">
<md-icon>cancel</md-icon>
</button>
</md-list-item>
</md-list>
【问题讨论】:
-
我不是 100% 清楚你想要实现什么,但在你的代码中你从未订阅过
users$可观察对象,所以它可能仍然很冷。 -
我确实使用 angular2 异步管道订阅了模板中可观察到的 user$。每当发生 removeUser$ 事件时,我都会尝试从 user$ 中删除用户。我也发一下模板,在plunker里,谢谢。
标签: angular reactive-programming rxjs