【问题标题】:Check angular form dirty state based on value根据值检查角形脏状态
【发布时间】:2014-12-29 14:15:37
【问题描述】:

我有一个简单的角形,比如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>

我想跟踪我的 from 并在值返回原始值时将表单状态设置为原始状态。

有没有办法说这是一个原始值,并且只用不等于这个值的值形成脏?

在我的示例中,我希望在用户键入内容时看到 from.$dirty = true,然后返回 default

【问题讨论】:

    标签: angularjs validation angular-ngmodel


    【解决方案1】:

    如果没有其他解决方案,我编写了以下指令,允许以声明方式进行。

    指令:

    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 时,输入状态将重置为原始状态

    【讨论】:

      【解决方案2】:

      你可以这样写:

      $scope.$watch('values.value', function (newValue) {
          if (newValue === 'some-default-value) {
               this.formName.$setPristine();
          }
      }
      

      【讨论】:

      • 我正在寻找一种更常见的方法来做到这一点。当我有超过 10 个这样的字段时,我该怎么做?我很欣赏它的特殊指令。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-02-06
      • 2019-06-08
      • 1970-01-01
      • 1970-01-01
      • 2023-03-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多