0

コントローラーに入力の各検証タイプとエラーメッセージを保存させる目的で、検証を動的に入力に追加しようとしています。機能していますが、フォームが 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 を読みましたが、問題は似ているようですが、私が必要としているものとはまったく異なります。

助けてくれてありがとう

4

0 に答える 0