Dart で記述された私の Angular2 アプリには、ビュー内で必ずしも特定の関係を持たないコンポーネント間で共有されるデータを追跡するサービスがいくつかあります。任意のコンポーネントによって開始された更新がすべてのコンポーネントの表示に反映されるようにする必要がある、OnPush
変更検出のパフォーマンス上の利点が必要である、コンポーネントが作成される前に設定された可能性のある値を表示するコンポーネントが必要である、これらすべてを達成したい最小限のボイラープレートで。
私の調査によると、Observables が必要なものである可能性がありますが、いくつかの点で明確な答えを見つけることができませんでした。
Angular2 でうまく動作する Dart の Observable の実装はありますか?
Observable は Dart Stream と意味のある違いがありますか? 特に、Observable は将来の更新について通知されるだけでなく、現在の値を取得することをサポートしていますか?
最後になりましたが、Observable が私の要件を満たしていると仮定すると、コンポーネントの Observable String プロパティを宣言し、注入されたサービスから取得した Observable で初期化し、その値をコンポーネントのテンプレートに表示するための最小限の構文は何でしょうか (pre で始まる) -既存の値)、およびその値を更新すると、プッシュ変更検出用にコンポーネントが自動的にマークされますか?
Observable がこれで機能しない場合、他にどのようにすればよいですか? 私の現在のアイデアはStream
、新しいリスナーが受け取る他の何よりも先に最新の値を挿入するカスタム サブクラスを使用し、それをasync
パイプ経由で送信して、ストリームからの値の抽出と変更検出のマーキングを処理することです。
私の理想的なソリューションは、次のようになります。
@Injectable()
class MyService {
@observable int health;
}
@Component(
...)
class MyComponent {
@observable int health;
MyComponent(MyService service) : health = service.health;
}
そしてテンプレートでは:
<span>{{health | async}}</span>
または本当に理想的ですが、これはAngularのテンプレートコンパイルに何らかの形でフックする必要があります(おそらくトランスフォーマーを使用しますか?私はそれらがどのように機能するかをまだ知りません):
<span>{{health}}</span>
そしてそれだけで、それはうまくいくでしょう。
私が現在取り組んでいるカスタム ソリューションは、それほど便利ではありませんが、それに近いものです。