0

我有一个要重置的表格。如果我$setPristine在 Angular 中使用该方法,这会让我有所收获。

但是,如果您查看以下孤立的案例,您会看到当您按下重置按钮重置表单时,save控制台会记录一条消息。这是我编写代码以将对表单所做的任何更改保存到服务器的地方。

http://jsbin.com/OLIziRe/14/edit

在此示例中,save当值不同时记录。这包括表单设置为 pristine时,因为先前的值将是表单重置之前的值,而新值将是undefined.

我不想要这种行为。如果有更改,我只想记录save消息——如果表单被重置,不应该有“以前的值”。

我能想出的唯一解决方案是做一些诡计以重新渲染视图并重新初始化控制器,从而丢失所有以前的状态。

http://jsbin.com/OLIziRe/12/edit

AngularJS 的方法是什么?

4

1 回答 1

0

您可以使用第一个解决方案这样做:

var app = angular.module('myApp', []);

app.directive('someDirective', function () {
  return {
    restrict: 'A',
    require: 'ngModel',
    link: function (scope, element, attrs, ctrl) {

        scope.$watch(function () {
          return ctrl.$modelValue;
        }, function (newValue, lastValue) {
          // Only save if the values do not match
          if(scope.someForm.$dirty){
            console.log(newValue !== lastValue ? 'save' : '');
          }
        });

    }
  }
});

在 console.log 之前,您检查表单是否处于 $dirty 状态,用户是否为表单设置了值。

当您执行 $setPristine() 时,您将表单重置为 $pristine 状态,因此 $dirty 状态为假。

希望能帮助到你 !

于 2013-09-24T08:51:35.120 回答