根据值检查角形状脏状态

时间:2014-12-29 14:15:38

标签: angularjs validation angular-ngmodel

我有一个简单的角度形式,就像这个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

2 个答案:

答案 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();
    }
}