2016-09-27 12 views
1

私はのためにResolversとちょっと混乱しています。 Resolversが解決する問題は、レンダリング時にオブジェクトにコンポーネントが存在することです。私はリゾルバずにそれを行うとの約束を経由して、コンポーネントのコンストラクタでオブジェクトをフェッチ開始するとの約束は十分に早く解決しない場合は、Angular2で解決されたデータへの非同期アクセス

{{myObj.foo.bar}} 

のようにテンプレート内のネストされたプロパティにアクセスすることは非常に可能性が高い、エラーにつながる可能性http要求が行われる必要があるとき。以前のようにしかし、コンポーネントのコンストラクタ

this.route.data.subscribe(val => {...}); 

でこのようにそれを行うには私に語ったリゾルバから解決のオブジェクトを受け取るについてはほとんど情報が、これは同じのsh * tのではないですか?さて、バックエンドのリクエストはすでに完了しており、すぐにサブスクリプションを受け取ることは認めています。それにもかかわらず、私は解決されたデータに再び非同期的にアクセスします。テンプレートレンダリングで{{myObj.foo.bar}}にアクセスできる可能性は非常に高いですが、保証はありませんか?

私はそれがあまりにも重大であるかどうかわかりません。 canActivateをルートに使用し、解決されたオブジェクトをサービスに設定することで、どのコンポーネントからも同時にアクセスできるようになるのは、私の意図に近いものです。

明確化

+0

は保証はありません、ただ、安全性チェックを使用し、 'このmyobj .fooという.bar'、値が最終的にそこに到達すると、それは再レンダリングされます。 –

+0

これは私が避けたいものです。数十個の "?"私のテンプレートの演算子。また、?演算子は、オブジェクトがオプションであることを意味します。ただし、ユーザーのプロフィールページでは、電話番号はオプションでも構いませんが、ユーザーオブジェクトはオプションではありません。必須です。 – Matt

答えて

2

ラップ全体のテンプレートまたはあなたが*ngIfmyObjにアクセスするために必要な部品を楽しみにしています:?それは到着する

<ng-container *ngIf="myObj?.foo"> 
    {{myObj.foo.bar}} 
</ng-container> 
+1

これは?sの多重度を解決します(そして、HTML内に余分なノードを追加します)。それにもかかわらず、私は、すでにフェッチされていて直接アクセス可能な '' Subject''を介してデータにアクセスする目的は見ません。おそらく私はちょうどあまりにも頭がおかしいですが、少なくとも私の特定のユースケースでは、データをサービスに注入するリゾルバとしてのガードパターンを「乱用する」ことは、私にとってはより意味があります。とにかくありがとう。 – Matt

+1

''はDOMに追加されません( '