AngularJSに次の静的フォームがあります。
<form name="myForm" class="form-horizontal">
<label>First Name:</label>
<input type="text" name="first_name" ng-model="entity.first_name">
<label>Last Name:</label>
<input type="text" name="last_name" ng-model="entity.last_name">
</form>
Angular は FormController を作成し、それをスコープ (フォーム名の下) に公開します。つまり、次のようなプロパティにアクセスできます。
$scope.myForm.first_name.$error
$scope.myForm.last_name.$invalid
...
これは超便利!
しかし、私の場合、ディレクティブを使用して動的にフォームを作成しています:
<form name="myForm" class="form-horizontal">
<field which="first_name"></field>
<field which="last_name"></field>
</form>
ディレクティブは、しばらく時間が経過するまで<field>
実際の要素に解決されません(サーバーからデータをフェッチした後、ディレクティブをリンクした後など)。<input>
ここでの問題は、動的フィールドが FormController に登録されていないかのように、フォーム コントローラーでフィールド プロパティが定義されていないことです。
// The following properties are UNDEFINED (but $scope.myForm exists)
$scope.myForm.first_name
$scope.myForm.last_name
理由はありますか?解決策/回避策はありますか?
この jsFiddle でコード全体を確認できます:
http://jsfiddle.net/vincedo/3wcYV/