コントローラーに入力の各検証タイプとエラーメッセージを保存させる目的で、検証を動的に入力に追加しようとしています。機能していますが、フォームが ng-if にある場合は機能しません。これは、非同期呼び出しが返されたときにのみ true に設定されます。
これが機能しない例を抜粋して示します: http://plnkr.co/edit/aeZJXqtwVs85nPE1Pn2T?p=preview
含まれている div から ng-if を削除すると、検証が機能し始め、非同期呼び出しで設定されたデータが入力に取り込まれます。ng-if を使用すると、テキストが入力されず、検証が実行されません。
<body ng-controller="MainCtrl">
<div ng-if="name">
<form name="demoForm">
<input type="text"
name="password"
ng-model='name'
add-min-length
ng-maxlength='15'
required/>
<div ng-messages='demoForm.password.$error'>
<div ng-message='required'>required</div>
<div ng-message='minlength'>min length</div>
<div ng-message='maxlength'>max length</div>
</div>
</form>
</div>
</body>
ng-if="name" を削除すると、機能し始めます。
app.controller('MainCtrl', function($scope, $timeout) {
$timeout(function(){
$scope.name = 'Thing';
}, 1000);
});
app.directive('addMinLength', function($compile){
return{
priority: 1001,
terminal: true,
compile: function(el){
el.removeAttr('add-min-length')
el.attr('ng-minlength', '5');
var fn = $compile(el);
return function(scope){
fn(scope);
}
}
}
});
これがなぜなのか説明できる人はいますか?
https://groups.google.com/forum/#!searchin/angular/ng-if $20directive/angular/Vjo4HZ2bW1A/vKWf-m6BKMkJ を読みましたが、問題は似ているようですが、私が必要としているものとはまったく異なります。
助けてくれてありがとう