2016-11-17 77 views
2

我在ng-if指令中有一個表單。我想用$valid檢查控制器中的表單驗證。AngularJs:在ng中形成 - 如果不能從控制器訪問

<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嘗試刪除'$ parent'? – Icycool

回答

5

ngIf指令根據{expression}刪除或重新創建一部分DOM樹。如果分配給ngIf表達式計算爲假值則該元素被從DOM移除,否則元素的克隆重新插入到DOM。 你可以去throgh這個鏈接doc也是我的答案在這裏answer

你可以使用ng-show而不是ng-如果它對你是可行的。

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

這是因爲ngIf創建一個新的範圍,所以名稱=「形式」將註冊在該新範圍的形式控制器(它是CTRL範圍的子層)。您可以通過綁定到目標作用域上的現有對象來解決此問題。 (或者,您可以綁定到控制器並使用controllerAs語法,這通常被認爲是一種好的做法。)

這是因爲原型繼承在JavaScript中的工作原理。

您可以在這裏找到 <form name="data.form" novalidate ng-if=true> http://plnkr.co/edit/2Ip3gNPdUWWV0zK8PNJr?p=preview