2016-04-06 7 views
0

Angularにまったく新しく、ng-repeatにはseverl入力ボックスが表示され、それぞれに独自のng-model名が必要ですが、ng-repeatはマイapp.js 入力テキストのng-repeatはディレクティブのng-modelに設定されていません

= "{{data.id}}名前でNG-モデルを投入し、クラッシュ私はウォッチャー{{}}その周りを構築しようとした場合(つまり、NG-モデルではない:

angular.module('app', []) 
     .controller('ExampleController', ['$scope', function($scope) { 
     $scope.data = { 
     dataSet: null, 
      inputs: [ 
      {id: 'data1', name: 'Option A', type:'input', preFill:"no.A"}, 
      {id: 'data2', name: 'Option B', type:'input', preFill:"no.B"}, 
      {id: 'data3', name: 'Option C', type:'input', preFill:"no.C"} 
      ], 
     }; 
    }]).directive('formPanel', function() { 
      return { 
      restrict: 'E', 
      scope: { 
       info: '=' 
      }, 
      template: '<div ng-controller="ExampleController"><form name="myForm">'+ 
      '<label for="{{option.name}}" ng-repeat="option in data.inputs"><br />'+ 
      'Input {{option.name}}:'+ 
      '<input ng-model="option.id" id="{{option.id}}" name="{{option.name}}" '+ 
      'type="{{option.type}}" class="form-control">'+ 
      ' </label></form><hr>'+ 
      '<span>data: = {{ data1}} , {{data2}}, {{data3}}.</span><br/>'+ 
      '</div>' }; 
    }); 
}) 

とhtml:

<!doctype html> 
<html lang="en"> 
<head> 
<meta charset="UTF-8"> 
<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.5.3/angular.min.js"></script> 
<script src="app.js"></script> 

</head> 
<body ng-app="app" > 
<form-panel info="data"></form-panel> 
</body> 
</html> 

私はトンでみました彼のPlunker:Plunker Link

ngモデルはバインドされていません(?)おそらく同じ理由で$スコープ名が入力の代わりに名前の代わりにデータとして表示されますバインドされるデータ

すなわちNG-モデルは=「DATA1」読んでください、代わりにNG-モデル=「option.id」

+0

テンプレート内のng-Controllerの使用は、複数のファイルではなく、ここに簡単に投稿できるようにすることでした。予想される出力はdata = no.A、no.B、no.Cです。データは3つの入力ボックスから出力されます。 – BaneStar007

+0

それで、トラックについて、$ compile、$ link ..を読んだ後、私の問題に直接対処しているようですが、私はそれを理解していないと言います.. "

..すべての300 +それらの..各入力フィールドにアクセスすることができるようにするには、データを参照してください.. FML。 – BaneStar007

答えて

1

まずとして読み込み、あなたはちょうどそれが行うことはありません宣言し、アプリにコントローラを添付しなければなりません。

あなたは属性NG-コントローラ=「ExpampleController」を追加、またはディレクティブにコントローラを追加することによってこれを行うことができます。

restrict: 'E', 
controller: 'ExampleController' 
template:... 

しかし、あなたはディレクティブに追加した場合、あなただけ配置する必要があります要素<form-panel>であり、情報を渡す必要はありません。また

、あなたはNG-モデルを補間することはできません= "{{someDataが}}" という表現は、すでに中括弧なしで評価されるよう

+0

あなたはコントローラが既に添付されていないと思うか分かりませんが、それをテンプレートに入れておけばいいのですが、htmlの外に置いたときは全く動作しません。あなたが最後の文で述べたことは、ng-modelは$ scopeの名前でなければならないので、 'option.id'として渡しますが、IN option.idではなく、文字列 " option.id " – BaneStar007

+0

あなたはどういう意味ですか?" alltogethエル "?どのようなエラーが表示されますか? –

+0

遅れて申し訳ありません。私はプランカを編集し、停止しましたが、私のプランカが別のページから編集されていることを確認することができませんでした。コントローラをテンプレートからディレクティブに移動すると、変更はありません。その答えは私が探しているものではありません。 – BaneStar007

1

下記のHTMLコードを確認してください:

<div> 
    <form name="myForm"> 
    <label for="{{option.name}}" ng-repeat="option in data.inputs"><br /> 
     Input {{option.name}}: 
     <input ng-model="option.id" id="{{option.id}}" name="{{option.name}}" 
     type="{{option.type}}" class="form-control" 
     placeholder="{{ option.preFill }}"> 
    </label> 
    </form> 
    <hr> 
<tt>data: = {{ data.inputs[0].id }} , {{data.inputs[1].id}}, {{data.inputs[2].id}}.</tt><br/> 
</div> 

コードを変更してあります。Plunker link

+0

私はチェックしましたが、何もしなかったので、データフィールドは データ:= {{データ1}}、{{データ2}}、{{データ3}}です。
BaneStar007

+0

ここで確認できますか?私はplunker htmlを保存していませんでした。 – Madhukar

+0

ああ、私はあなたがやったことを見て、その素晴らしい回避策の間に、ポイントは、$ scope.data1そのデータの名前としてアクセスすることです。私はあなたが私に与えたもので働くことができます、私は答えとしてそれをマークする必要がありますか?より正確な回答は、送受信データの場所として$ scope.data1を使用することです。双方向バインディングを使用しない場合は、document.getElementById( 'data1')を使用することもできます。 data.inputs [0]を探しているだけではありません.id – BaneStar007

関連する問題