これは基本的な質問で、基本的な回答であれば謝ります。私は特にAngular2の新機能や一般的な開発ではかなり新しく、止まっています。* ngIf firebaseとの同期問題
私はFirebaseからリストを引っ張っているサービスがあります。
listItems: FirebaseListObservable<any[]>;
constructor(public af: AngularFire) {
this.listItems = af.database.list('items');
}
getFood() {
return this.listItems;
}
マイコンポーネント:
list: Observable<any[]>;
delBtnActive: boolean = false;
constructor(private dataService: DataSService) {
this.list = dataService.getFood();
}
ngOnInit(): void {
this.lookForDel();
}
lookForDel() {
var found = false;
this.list.forEach(items => {
items.forEach(item => {
if (item.del) {found = true};
})
});
this.delBtnActive = found;
}
そして最後に私のテンプレート、delBtnActiveブールの利用可能:
<button *ngIf="delBtnActive">Confirm Delete</button>
を
すべてがここで動作しますが、このルートが最初に初期化されたときにはボタンは表示されませんそれがそこにあるはずです。このルートから別のルートに切り替えてから戻ると、ボタンが正しく表示されます。 Firebaseのデータを更新すると、ボタンが正しく表示されます。
EDIT:コンソールのログに基づいて、lookForDel()メソッドはOnInitを呼び出すことに注意してください。 I と信じているのは、ルートが最初に初期化されたときにデータがロードされる前にngIfが発生していることです。
これに関する具体的な助言や一般的なヒントについては、非常に高く評価されます。あなたのボタンがアクティブであるかどうかを示す - - 代わりに、あなたはブール値を発すること、観察を構成することができforEach
を使用して放射された値のリスニングの
残念ながら、まだコメント機能に慣れています。上で使用したコードが動作しない*唯一の時間は初期ロード時であることに注意してください - これはいつも完璧に動作します。私はObservable w/asyncパイプが行く方法だと思いますが、これまでのところ正しく動作することができませんでした。あなたがそれを正しく設定するための良いチュートリアルを知っていれば、私はそれを感謝します。 – brovery
[this](http://briantroncone.com/?p=623)かもしれない? [デバッグログ](http://staltz.com/how-to-debug-rxjs-code.html)を追加したい場合は、 'do'演算子を' map'の後ろに置き、その値をconsole - 非同期パイプが 'delBtnActive'を購読していて、期待どおりの値であることを確認します。 – cartant