Angularjs形成。$ dirty

时间:2015-12-10 00:34:40

标签: angularjs

我能够使用$ dirty更改或不更改表单数据。

例如:我更改了文本框或下拉,然后$ dirty变为true。如果我还原旧数据仍然是真的。我需要知道我的更改是否还原。我们在Angularjs有房产吗?如果属性为true,我想启用保存按钮,否则应该禁用。

https://docs.angularjs.org/api/ng/type/form.FormController

我需要实现大约10页,每页有10个文本框和几个下拉菜单。所以我不想在我的页面中手动跟踪每个控件。

2 个答案:

答案 0 :(得分:0)

您可以尝试使用此模块:https://github.com/betsol/angular-input-modified

来自README文件:

  

此Angular.js模块为其添加了其他属性和方法   ngModel和ngForm控制器,以及CSS类   底层表单元素,为最终用户提供检测设施   并指出表格数据的变化。

     

此额外功能可让您提供更好的可用性   形式。例如,您可以向表单元素添加装饰   实际上是改变了。这样,用户将看到哪些值已更改   自上次编辑以来。

     

此外,您可以重置整个表单或仅重置一个字段   只需一次调用即可初始状态(取消所有用户编辑)   reset()方法或通过调用锁定新值(保留新状态)   重载$ setPristine()方法。

免责声明:我自己没有尝试过,我发现作者会覆盖ngModel指令而不是adding a decorator,这可能很危险......但是至少,您可以查看源代码并了解如何使用类似功能编写自己的服务或指令。

答案 1 :(得分:0)

Even though it does not follow the usage of $dirty, but an implementation similar to this might be helpful for you in the case of a Save button on update.

Inside your html:

<form name="testForm" ng-controller="ExampleController" ng-submit=" save()">
  <input ng-model="val" ng-change="change()"/>
  <button ng-disabled="disableSave">Save</button>
</form>

Inside your controller:

.controller('ExampleController', ['$scope', function($scope) {
  $scope.disableSave = true;  // Keep save button disabled initially

  $scope.val = 'Initial';  // Initial value of the variable

  var copyVal = $scope.val; // Copy Initial value into a temp variable 

  $scope.change = function() {
    $scope.disableSave = $scope.val === copyVal;
  };

  $scope.save = function() {
    // Save the updated value (inside $scope.val)
    console.log($scope.val);

    // Re-disable the input box (on successful updation)
    copyVal = $scope.val;
    $scope.disableSave = true;

  };
}]);

Here is a working plunkr for the same.