2
我創造了這個指令:爲什麼手動將控件設置爲Angular的原始形式時,表單會被標記爲髒?
app.directive("date", ['$filter', function ($filter) {
return {
restrict: 'A',
require: '?ngModel',
link: function (scope, element, attributes, controller) {
scope.$watch(function() {
return controller.$modelValue;
},
function (newVal, oldVal) {
if (newVal !== oldVal && newVal) {
var format = attributes.date || "dd-MM-yyyy";
var parsedDate = new Date(newVal);
parsedDate = $filter('date')(newVal, format);
controller.$setViewValue(parsedDate);
controller.$setPristine();
controller.$render();
}
});
}
}
}])
我這個指令是這樣的:
<form name='myForm'>
Date: <input type="text" data-ng-model="contract.StartDate" name="StartDate" date />
</form>
在我的範圍,我沒有這決定了保存按鈕的狀態的功能:
scope.canSave = function() {
return scope.contractForm.$valid && scope.contractForm.$dirty;
}
正如您在date
指令的代碼片段中看到的那樣,我設置了controller.$setPristine()
,但是此操作沒有通過表單控件oller,因爲form.$dirty
設置爲true
,但是當我檢查form.StartDate.$dirty
時,它設置爲false
。
這怎麼可能,我怎麼能確保/強制form
看到StartDate
不是髒?
你的答案提供瞭解決方法;它並不回答你的問題。我將這稱爲Angular中的一個錯誤(與1.4.8相同的問題)。下面是一個簡單的演示問題的普朗克:https://plnkr.co/edit/6noEtj6vbMkqxiKK6Yp7?p=preview – Eccentropy