2016-11-05 9 views
0

私の変数はコントローラにthisにバインドされていますが、私のルート指定ではcontrollerAs: 'game'を使用しています。これにより私はHTMLに{{game.var}}でそれらを含めることができます。時には、私は表示したいオブジェクトをバインドすることがありますが、これは繰り返し書くようにします。{{game.object.a}}{{game.object.b}}{{game.object.c}}コンテキストスコープを角度に設定する

Meteorを使用した以前のプロジェクトでは、withキーワードを使用してデータコンテキストを設定できました。

{{#with object}} 
    {{a}} 
    {{b}} 
{{/with}} 

しかし、これと同様の機能はAngularでは表示されません。私が仕事をすることができる最も近いのは、属性ng-repeat="object in [game.object]"を追加することです。これは機能しますが、あまり意味がありません。これにより、game.objectが変更されたときに新しい要素がロードされる前に、最初の要素が消去される前に、2番目の要素のクイックフラッシュが発生します。

この問題の解決策がありますか?

答えて

2

Angularは、このコンテキストスコープを意図的に使用して、親スコープと子スコープの混同を避けます。子スコープを使用していない場合は、コントローラーを構文として完全にスキップし、モデル内の$scopeにすべてをバインドすると、game.agame.babになります。

子スコープを使用している場合は、コントローラAをスキップすることはできますが、ビューの特定のモデルが属するコントローラを混乱させる可能性があります。 withまたはusingという構文はないので、これらのモデルを参照している限り、バインドされたスコープgame.a,childGame.aを宣言する必要があります。これは、過度に冗長かもしれませんが、少なくともはっきりしています。

this postも参照してください。

フラッシュの問題に関しては、意味的な目的でng-repeatを使用しないでください。これは主に、同様に構造化されたデータの配列を表示することです。

+0

私はhttps://github.com/johnpapa/angular-styleguide/tree/master/で提供されているスタイルガイドに従い、 '$ scope'に直接バインドすることを控えています。私は、この 'with'や' using'構文を好むかもしれない状況では、代わりにディレクティブを挿入して、問題を完全に緩和するべきだと思っています。 – JacobPariseau

+0

はい、私はこれが賢明だと思います。ディレクティブを正しく使用すると、ビューをモジュール化してデータをカプセル化するという利点があります。 –

+0

申し訳ありません、私はその方向に移動します。あなたの考えをありがとう – JacobPariseau

関連する問題