2014-02-28 27 views
4

我有以下代碼:

  <form class="form" 
        data-ng-submit="modalSubmit(modal.data)" 
        id="modal-body" 
        name="modalForm" 
        novalidate> 

這工作,當我點擊類型的按鈕提交,則modalSubmit函數被調用。

不過,我想這樣做在我的控制器:

$scope.modalForm.$setPristine(); 

但它給出了一個錯誤說:

has no method '$setPristine' 

我如何我可以設置爲質樸的形式?我也嘗試添加data-ng-form="modalForm"後來我得到 一個消息,說某事重複的指令名稱的效果。

我試圖改變表單元素的DIV但隨後提交按鈕的點擊不會調用 功能

下面是一個例子(從其他用戶修改),顯示什麼,我試圖做的是設定值質樸:

plnkr.co/edit/LNanJdAggMLIgxii0cfv?p=preview

回答

6

你沒有做錯什麼沒有,唯一的問題是你引用的是舊版本的角度在$setPristine()不是一個功能。 $setPristine()在1.1加+,所以引用的角度較新的版本,你是好去。看到它在this plunk中工作,使用1.2。+。

如果不能升級,那麼一個骯髒的解決辦法是遍歷表單中的所有輸入和設置他們的$髒和手動$原始值:

$scope.mp = function() { 
    $scope.mainForm.$pristine=true;//clean main form 
    $scope.mainForm.$dirty=false; 
    angular.forEach($scope.mainForm,function(input){//clean all input controls 
    if (input !== undefined && input.$dirty !== undefined) { 
     input.$dirty=false; 
     input.$pristine=true; 
    } 
    }); 
} 
0

它已經在這個link實現的,你可以使用它,這是因爲它已經在plnkr鏈接被證實。 正如可以從上面的描述看到,$ setPristine僅改變表單的狀態(從而復位的形式施加到每個控制的CSS)。

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

+0

問題是我得到一個消息,說有沒有方法$ setPristine –

+0

如果你發佈你的代碼的其他一些地方也將是巨大的,可能是你使用它的一些錯誤,可能是那是什麼爲什麼它給你錯誤。但我仍把NG-提交按鈕的形式和點擊提交按鈕,它subimts這種形式,我已經更新了plunkr too.http://plnkr.co/edit/JtDf5OjgWluWUF4CswtL P =預覽 –

+0

感謝您的幫助。這是我的例子:http://plnkr.co/edit/LNanJdAggMLIgxii0cfv?p =預覽 –

3

首先,你的角度版本是舊的,1.2.12是CDN上最新的穩定版本。但即使它不允許$ setPristine,因爲正在進行的HTML5驗證。

最大的問題是您在字段上使用了required而不是ng-required。瀏覽器爲你做表格驗證而不是角度。您還可以將novalidate屬性添加到表單標記。

http://plnkr.co/edit/l1mUCceSFMFFZWgGgL6u?p=preview

+0

這是爲我做的「ng-required」。真棒! – gregsdennis