Angularfire 中的 valueChanges 会返回一个可观察对象,该对象在数据发生更改时会发出信号。然而,一些用户发现该对象会发出两次信号,这可能会导致意外的行为。
这个问题的解决方法是在 valueChanges 前使用 take(1) 操作符,该操作符将仅获取一次响应并将其转换为一个完整的对象。以下是一个示例:
import { AngularFireDatabase } from '@angular/fire/database'; import { take } from 'rxjs/operators';
@Component({ selector: 'app-example', templateUrl: './example.component.html', styleUrls: ['./example.component.scss'] }) export class ExampleComponent { constructor(private db: AngularFireDatabase) {}
getData() { this.db.object('data').valueChanges().pipe( take(1) ).subscribe(data => { console.log(data); }); } }
在上面的示例中,我们使用 take(1) 操作符来订阅仅发出一次响应的 valueChanges 可观察对象。对于一些用户,这可以解决问题并在数据更改时只发出一次信号。