フォームを動的に生成するシステムを作成しようとしています。私は、入力IDから入力フィールドに関するメタデータを検索し、そのフィールドのテンプレートを生成する指令を作成しました。入力は正常に機能しますが、フォームはそれが存在することを認識しません。 $ validなどの計算には影響しません。コンパイルとリンクの間には何か神秘的なことが起こっているので、フォームは入力を認識しますか?フォームがカスタム入力ディレクティブを認識しない
ここでは単純化されたコードです: にこの動作を参照:あなたが考えている神秘的なものは「適用範囲」であるPlunker
<form name="myForm">
works: <input type="text" ng-model="model.works" required></input>
<div ng-repeat="inp in inputList">
broken: <my-component info="inp"></my-component>
</div>
form valid: {{myForm.$valid}}
</form>
app.controller('MainCtrl', function($scope) {
$scope.model = {
works:'works',
broken:'broken',
};
$scope.inputList = [
{id:'broken'},
];
});
app.directive('myComponent', function($compile) {
return {
restrict: 'E',
scope: {
'info': '='
},
link: function($scope, $element, $attrs) {
var html = '<input type="text" ng-model="model.'+ $scope.info.id +'" required></input>';
$scope = $scope.$parent.$parent;
//^this hack makes the model work, but form still not attached
var el = $compile(html)($scope);
$element.replaceWith(el);
}
};
});
これは、各入力上書きフォームを持たないでしょうか?$ valid? – Dirigible
はい、ほとんどの場合、スコープ間の通信方法の例を示していました。フォームオブジェクトにアクセスできます。そのアクセスをどのようにして行うのかは、あなた次第です。この猫には多くの方法があります。 – Drellgor