[英]How to avoid use of watch to prevent directive from modifying a property in a manner I don't want
[英]Modifying a directive to 'watch' a ctrl property?
我有一條指令,檢查他們是否單擊表單上的提交。 如果是這樣,它將添加“已提交”類。 這使我僅在提交表單時才將表單輸入設置為紅色(我討厭在輸入時將其實時顯示為紅色)。
'use strict';
app.directive('formSubmitted', function() {
return {
restrict: 'A',
require: 'form',
link: function(scope, element, attrs, ctrl) {
ctrl.$submitted = false;
element.on('submit', function() {
scope.$apply(function() {
ctrl.$submitted = true;
element.addClass('submitted');
});
});
}
};
});
問題是一旦成功提交表單,就會“重置”表單。我需要從控制器內部刪除submitted
類。 我已經嘗試了很多方法來完成此操作,但沒有成功...就像下面的偽代碼一樣...
angular.element($scope.myForm).removeClass('submitted');
我在想的是代替控制器執行此操作(無論如何也不起作用),而是嘗試使“ submitted”類鏡像ctrl
上的$ submitted屬性。
$scope.myForm.$submitted = false
,該類將適當更新。
我什至不知道從哪里開始,而谷歌搜索並沒有幫助...
謝謝!
在這種情況下,我使用的一種簡單方法是利用Angular ngClass指令並綁定到控制器上的屬性,該屬性維護狀態是否提交。 像這樣:
<button ng-click="isSubmitted = !isSubmitted">Submit</button>
<form ng-class="{submitted: isSubmitted}">
</form>
您可以使用ng-class指令:
<form name="myForm" ng-class="{submitted: $submitted}">
在此處查看文檔: https : //docs.angularjs.org/api/ng/directive/ngClass
在處理表單提交的控制器中,您當然具有提交功能:
$scope.submit = function (form) {
$scope.$submitted = true;
if (form.$invalid) {
return;
}
// Actually send data to backend, eventually receiving a promise
promiseFormBackend = MyService.sendForm();
promiseFromBackend.then(function () {
$scope.$submitted = false: // resetting the form class
});
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.