angularjs - 根据值检查 Angular 形脏状态

标签 angularjs validation angular-ngmodel

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

我想跟踪我的来源的脏信息,并在值返回到原始状态时将表单状态设置为原始状态。

有没有一种方法可以说 Angular 认为这是一个原始值,并且仅在不等于该值的情况下才形成脏值?

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

最佳答案

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

指令:

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

关于angularjs - 根据值检查 Angular 形脏状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27690527/

相关文章:

javascript - 具有功能的 Angular UI Bootstrap Typeahead 模板 ng-src

javascript - Angular 图像拖动并调整大小

mongodb - MongoDB 中的验证器不起作用

javascript - 隐藏字段的 Angular 2 表单验证

javascript - Ng-model 不适用于动态添加的 html 控件

javascript - AngularJS - 多重绑定(bind) - 计算输入值

javascript - Angular $q 和 google.maps.api

reactjs - Redux 表单复选框验证

javascript - 如何将 Angular ng-repeat 与 ng-grid 和 ng-click 一起使用?

javascript - Controller 中的 Angular 构造函数