2016-09-10 22 views
2

私はAngular(1.3.10)を使用することを学んでいます。カードのハンドのスーツと値を指定する2つの入力フィールドがあります。下の画像からわかるように、スーツとバリューをハードコードしようとすると、カードが正常に表示されます(右側に1枚)。しかし、それをバインドするためにng-modelを使用すると、ブラウザによって取り込まれても、card_valueは正しく表示されません。私は間違って何をしていますか?ng-bindingは動作しませんが、ng-modelが動作します

<div ng-app = "cards"> 
    <form> 
     <div> 
      <input ng-model = "card_value"> 
      <span>of</span> 
      <input ng-model = "card_suit"> 
     </div> 
    </form> 

    <div> 
     <p>Entered: {{card_value}} of {{card_suit}}</p> 

     <!-- card.value is not binding up perfectly fine --> 
     <card value = "{{card_value}}" suit = "{{card_suit}}"></card> 
     <!-- --> 

     <!-- this shows up perfectly fine --> 
     <card value = "5" suit = "Clubs" ></card> 
     <!-- --> 
    </div> 
</div> 

私が表示されている参照して何を: enter image description here

クロームインスペクタ:NG-結合が失敗した場所を強調表示されている部分があり、5 enter image description here

+0

'this.pips'を使用する必要があり、フォーム要素の内側に置かれることを意図されており、双方向のデータは を結合しているが、一度ディレクティブinitの、決して割り当てられ、後で修正されました。バインディングを動作させるには、 'this.getPip = getPip'とし、テンプレートの' card.pip'を 'card.getPip()'に置き換えてください(これはthis.displayにも同じです)。良いことは、バインディングが機能することです。悪い点は、バインディングを効率的に計算できないため、無限のダイジェストが発生する可能性があることです。いずれにしても、各ピップにng-repeatを使用すると、すぐにパフォーマンスが低下します。これがデモであればOKですが、実際のアプリでは、外観とパフォーマンスの両方にプレマイド画像を使用することができます。 – estus

+0

@estusもし私があらかじめ作られた画像を使うなら、私は52のif文で終わるつもりです。より良い方法が必要です –

+0

@estusあなたのソリューションをコードに入れてもらえますか?それは少し難しいです。 –

答えて

0

ng-bindあるべき結合一方向のデータを持っています。

ng-modelあなたはng-bind

<div ng-bind-html="card_value"></div> 

DEMO APP

+0

なぜng-modelの代わりにこれを使うのですか? –

+0

@ b11 ngModelディレクティブは、NgModelControllerを使用してスコープのプロパティにinput、select、textarea(またはカスタムフォームコントロール)をバインドします。この指令によって作成され、公開されます。 [ng-bind](https://docs.angularjs.org/api/ng/directive/ngBind)の例では – Sajeetharan

+0

ですが、それらは入力に 'ng-model'を、入力に' ng-bind'を入れていますスパン要素。カードは私が作成したディレクティブであり、divではないので、私のケースではどうすれば使用できますか? ' –

関連する問題