2016-11-17 15 views
2

私はng-ifの指示文の形をしています。私は$validを使用してコントローラのフォーム検証をチェックしたいと思います。AngularJs:内部のフォーム - コントローラからアクセスできない場合

<div ng-if="paymentMethod == 12"> 
    <form name="creditForm" id="cc-form" novalidate> 
     <div class="form-group"> 
      <label for="cardNumber">Card Number</label> 
      <input type="text" autofocus class="form-control" name="card_number" ng-minlength="16" id="cardNumber" ng-model="creditCardNumber" required> 
      <div class="red-text" ng-messages="creditForm.card_number.$error" ng-if="creditForm.card_number.$dirty || creditForm.$submitted"> 
       <div ng-message="required">##global.Card_Num_Required##</div> 
       <div ng-message="maxlength">##global.Card_Num_MinLength##</div> 
       <div ng-message="minlength">##global.Card_Num_MaxLength##</div> 
       <div ng-message="minlength">##global.Card_Num_NumeriC##</div> 
      </div> 
     </div> 

とコントローラ

if ($scope.$parent.creditForm.$valid) { 
     alert('valid'); 
     } else { 
    alert('not valid'); 
} 

で有効なフォームをチェックしようとしているが、フォームがコントローラからアクセスできません。

+0

をサンプルplunkerを見つけることができますか? – Icycool

答えて

5

ngIfディレクティブは、{式}に基づいてDOMツリーの一部を削除または再作成します。 ngIfに割り当てられた式が偽の値に評価された場合、要素はDOMから削除されます。そうでない場合、要素のクローンがDOMに再挿入されます。 あなたが代わりにNG-場合にその実行可能な場合のNG-ショーを使用することができます。このリンクdoc throgh行くとまたここに私の答えanswer

ことができます。

1
$scope.$watch('creditForm.$valid', function(newVal) { 
      //$scope.valid = newVal; 
      alert('valid'); 
     }); 
0

ngIf新しいスコープを作成するため名=「形態」(CTRLスコープの子である)、その新しいスコープのフォームコントローラを登録するので、これは、起こります。これを解決するには、ターゲットスコープ上の既存のオブジェクトにバインドします。 (あるいは、コントローラにバインドして、一般的には良い習慣と考えられているcontrollerAsの構文を使用することができます)。これは、JavaScriptでプロトタイプの継承がどのように機能するかによるものです。

あなたは `$のparent`を削除してみてくださいここ <form name="data.form" novalidate ng-if=true> http://plnkr.co/edit/2Ip3gNPdUWWV0zK8PNJr?p=preview

関連する問題