私は非同期パイプがobservableで動作することを理解しており、後で来る予定のデータを非同期に読み込むのに役立ちます。Angular2なぜ非同期パイプ
しかし、私も非同期を使用せずに作業することができます。続き は
.....
<label>Prop</label>
<span>{{someProp}}</span>
<label>List</label>
<span *ngFor="let item of someList">{{item}}</span>
コード上記のコード
コンポーネント
export class XComponent{
someProp: string;
someList: string[];
someFn(){
this.someService.subscribe(
data=>{
this.someProp = data.prop;
this.someList = data.list;
}
);
}
}
テンプレートは、非同期を使用せずに、あらゆる問題なく私の作品です。 なぜ非同期を使用する必要がありますか?それはデータの変数を宣言する必要がなく、直接観測可能なものを使うことができるからです(データの代わりに観測値を宣言する必要があります)。コードは非同期例えば、角度のドキュメントから、その代わりの
@Component({
selector: 'async-observable-pipe',
template: '<div><code>observable|async</code>: Time: {{ time | async }}</div>'
})
export class AsyncObservablePipeComponent {
time = new Observable<string>((observer: Subscriber<string>) => {
setInterval(() => observer.next(new Date().toString()), 1000);
});
}
を取られ後
EDIT
私は2番目のコードがあまりにもきれいに見える私には
@Component({
selector: 'async-observable-pipe',
template: '<div><code>observable|async</code>: Time: {{ time }}</div>'
})
export class AsyncObservablePipeComponent {
time;
constructor(){
setInterval(() => time = new Date().toString(), 1000);
}
}
を書くことができます。 (クリーナーでさえ)
非同期パイプが内部にサブスクリプションを避けるためです:あなたが与えた新しい例を支援します。非同期パイプの動作は、オブザーバーがデータをループ変数に戻すようにサブスクライブし、そのオブザーバーを自動的に登録解除することです。 –
@BabarBilal AsyncPipeは、コンポーネントが破棄されるまでサブスクライブを解除しません。これはAngular AsyncPipeの文書に記載されています。 – Mantas
ええ、ngOnDestroyで手作業で破壊する必要はありません。 –