我有一个简单的角度形式,就像这个example。
JS:
angular.module('myApp', []).controller('AppController', function($scope) {
$scope.values = {
value: 'default'
};
});
HTML:
<form name="form">
<div class="form-group">
<label for="input">Value</label>
<input type="text" class="form-control" ng-model="values.value">
</div>
<pre>form.$dirty = {{form.$dirty}};</pre>
</form>
我想跟踪我的来自脏,并在值返回原始值时将表单状态设置为pristine。
有没有办法说出这是原始值的角度,并且仅使用与此值不相等的值形成脏?
在我的示例中,我希望在用户输入内容时看到from.$dirty = true
,然后再输入default
。
答案 0 :(得分:2)
如果没有其他解决方案,我已经编写了以下指令,允许以声明方式执行。
指令:
angular.module('myApp').directive('trackValue', function() {
return {
require: 'ngModel',
link: function(s, e, a, ngModelCtrl) {
ngModelCtrl.$setOriginalValue = function(value) {
ngModelCtrl.$originalValue = angular.copy(value);
}
ngModelCtrl.$parsers.push(function(value) {
if(angular.equals(value, ngModelCtrl.$originalValue)) {
ngModelCtrl.$setPristine();
}
return value;
});
}
}
});
然后你可以节省价值,并将变化形式与之进行比较。
$scope.form.value.$setOriginalValue($scope.values.value);
我已经更新my plunker我在这个指令中获得了所需的行为。您可以将输入值更改为任何内容,但是当您再次键入default
时,输入状态将重置为pristine
答案 1 :(得分:0)
你可以这样写:
$scope.$watch('values.value', function (newValue) {
if (newValue === 'some-default-value) {
this.formName.$setPristine();
}
}