有人可以说明 Angular 6 / rxjs 6 中 take(1) 的语法吗?
在下面的代码中,我从 Firestore 中检索了一个文档,然后将其作为 observable 提供。
然后我订阅那个 observable,读取文档的时间戳,并以人类可读的格式格式化年龄。这很好用,但是它不需要在每次文档流发生更改时都执行。它只需要执行一次,因为文档时间戳永远不会改变。
如何修改此代码以合并take(1)
,以便仅生成一次年龄字符串并且订阅items
不保持打开状态?take(1)
我在 Angular / rxjs 版本 6 下找不到任何明确的语法示例。我能找到的所有示例都是针对以前版本的。
import { Component, Input, OnChanges } from '@angular/core';
import { AngularFirestore, AngularFirestoreDocument } from 'angularfire2/firestore';
import { Item } from '../../interfaces/item';
@Component({
selector: 'app-item',
templateUrl: './item.component.html',
styleUrls: ['./item.component.scss']
})
export class ItemComponent implements OnChanges {
@Input() itemId: string;
private itemDoc: AngularFirestoreDocument<Item>;
public item: Observable<Item>;
public age: string;
constructor(private afs: AngularFirestore) {}
ngOnChanges() {
if ( this.itemId ) {
this.itemDoc = this.afs.doc<Item>('items/' + this.itemId);
this.item = this.itemDoc.valueChanges();
this.item.subscribe(thisitem => {
this.age = Utils.getFormattedAgeString(thisitem.timestamp);
});
}
}
}