Angular 2で観測可能なプログラミングを学ぼうとしますが、重要な点は1つもありません。 (TSファイル内のオブザーバブルをサブスクライブせず、オブザーバブル値をメンバ変数に変えずに)テンプレートレベルでイベントをクリック(クリック)します。Angular2のオブザーバブル(クリック)ハンドラ内で値を渡す方法
Firebaseの専門家の多くは、「可能な限り、angular2でasyncを使用して、手動での定期購読を防ぐようにしてください! - タスク$を手動で購読して配列に変換したくない理由。例えば
:私はコンポーネントの私のTSファイルでこれを持って
:
import {Task} from "../model/task";
constructor(private db:AngularFireDatabase, @Inject(FirebaseRef) fb) {
this.sdkDb = fb.database().ref();
}
findTaskById(id:string):Observable<Task> {
return this.db.object('tasks/' + id).map(task => Task.fromJson(task));
}
:私のサービスで
task$: Observable<Task>;
this.task$ = this.tasksService.findTaskById(taskId);
、これは、観察を返すAngularFireでfirebaseを呼び出すためのコードです
私のテンプレートでは、Angular2の値をasync pipeで問題なく使用できます。
<md-card-title>{{(task$ | async)?.title}}</md-card-title>
しかし、私はそうのように、このタスク$内の$ id値を必要とするボタンがあります。これはクリックとして動作しません
<button md-button *ngIf="(authInfo$ | async)?.isLoggedIn()" (click)="deleteTask((task$ | async)?.$key)">Delete</button>
は、式の中のパイプを許可していません...そしてIタスク$を購読してメンバ変数にするのは避けてください(RXJSプログラミングのためにタスク$を維持するベストプラクティス?)
$ keyの値は最初は存在しません。私は非同期パイプを使用できません!
サービスを表示できますか?ここでtasksService.findTaskById(taskId)が呼び出されますか? – Everett
こんにちは@pezetter!サービスコールを追加しました。それは基本的にangularFire2観測可能です。タスク$は正常に動作しています。それは非同期パイプを許可しない(クリックする)問題です。私はそれを避け、購読を使用しない方法は知らない。 –
非同期パイプの目的は何ですか?コンポーネントはタスクを定義し、最終的にコンポーネントのメソッド(deleteTask)を呼び出すため、なぜ$をdeleteTask $に渡す必要がありますか? deleteTaskメソッドで直接使用するのはなぜですか? – JSF