2013-11-15 33 views
2

我試圖在AngularJS中使用$setPristine函數來重置文本框,但它似乎不會導致所需的行爲。

我的形式如下:

<form name="addInviteForm" ng-controller="InviteCtrl" ng-submit="sendInvitation(userEmail)"> 

     Pristine? {{addInviteForm.$pristine}} 

     <!-- email input --> 
     <div> 
     <input type="email" name="email" ng-model="userEmail" placeholder="Enter email here" class="line-item-input see" required> 
     <span class="error" ng-show="addInviteForm.email.$error.email" style="color:red">Invalid Email</span> 
     </div> 

     <!-- submit button --> 
     <input type="submit" name="send" class="btn btn-success center" value="Send Invitation"> 
</form> 

而且在我的控制器對應的代碼:

$scope.sendInvitation = function(userEmail) { 

     // do some work here ... 

     // hmm, this doesn't seem to work ... 
     $scope.addInviteForm.$setPristine(); 
    }; 

雖然形式顯示$pristine是在形式項設置爲true,然後設置爲false當在文本框中輸入數據時,在提交表單後確實顯示$pristine設置爲true ....但文本框中的值與提交按鈕之前的值保持一致被按下。

我在這裏錯過了什麼?

回答

7

$setPristine不明確值從表單控件:

the docs

設置形式到它的原始狀態。

可以調用此方法來刪除'ng-dirty'類並將 表單設置爲其原始狀態(ng-pristine類)。這種方法也將 傳播到這個表單中包含的所有控件。

當我們希望 在保存或重置表單後「重用」表單時,將表單設置回原始狀態通常很有用。

正如可以從上面的描述看到,$setPristine僅改變表單的狀態(從而復位的形式施加到每個控制的CSS)。

如果你想清除每個控件的值,那麼你需要爲每個代碼做。

This plunker顯示$setPristine在行動中。

+1

謝謝。將'userEmail'綁定到'InviteCtrl'範圍內的一個變量並且在提交時重置該變量看起來已經成功了。 – dtg

+5

儘管我會說,這些文檔根本沒有說得那麼清楚。也就是說,控制的「狀態」和控制的當前「價值」之間的語義區別並不明顯.... – dtg

相關問題