2015-10-07 62 views
0

當表單保存成功時,我想將表單按鈕的文本從保存更改爲保存。保存已保存的角度表格

<form name="myForm" ng-submit="saveForm()"> 
    <!-- some input text fields here --> 
    <button type="submit">{{buttonText}}</button> 
</form> 

控制器:

$scope.buttonText = 'Save'; 
$scope.saveForm = function() { 
    //save operation here 
    $scope.buttonText = 'Saved'; 
    $scope.myForm.$setPristine(); 
}; 

這是工作完美,但我怎麼能重置按鈕「保存」,當用戶改變表單值,將其保存其他時間?我想到的一種可能性是在表單的原始狀態下進行$ watch,但我認爲有更好的解決方案?

回答

0

您可以在表單項目利用NG-change事件處理程序和修改按鈕的狀態存在。

<form name="myForm" ng-submit="saveForm()"> 
    <input type="text" ng-model="foo" ng-change="formChanged()" /> 
    <button type="submit">{{buttonText}}</button> 
</form> 

,並在你的控制器:

$scope.formChanged= function() { 
    $scope.buttonText = 'Save'; 
    //any other logic necessary 
}; 

這比使用一個表,你可以對你採取的行動聰明很多輕得多(例如,是什麼改變了,如果恢復到原來的值等)

0

例如,您可以在範圍屬性中添加自定義手錶,當其中一個更改時,您重置該按鈕的文本。

<form name="myForm" ng-submit="saveForm()"> 
    <input type="text" ng-model="foo" /> 
    <button type="submit">{{buttonText}}</button> 
</form> 

$scope.$watch('foo', function(){ 
    $scope.buttonText = 'save'; 
}); 

您也可以使用在每個輸入NG-變化來調用重置文本的功能,但不會有我的偏愛,因爲它的推移可維護性我猜的成本。另一方面,手錶可能有點貴。

使該腕錶更容易一點,你應該嵌套一個對象模型的屬性和使用$ watchCollection(自1.2)

+0

是的這與我所想的相似。但是我想只在沒有其他方式時才使用$ watch。 – chiii

+0

我認爲你堅持使用手錶。我會去$ watchCollection。看我的編輯。 –

+0

好的,謝謝。猜測沒有比ng-change或$ watch更好的解決方案。 – chiii

0

您可以在輸入字段中調用ng-change並編寫一個函數來重新設置它。

<input type="text" ng-model="foo" ng-change="buttonText ='save'"/>