在 AngularJS 中,如何在禁用表单字段时临时删除模型 属性?

In AngularJS, how to temporarily remove a model property when a form field is disabled?

请看这个例子:

http://codepen.io/troywarr/pen/zxWLeZ

我正在开发一个类似的表单,其中我有一些数据,用户可以通过单击复选框选择不输入这些数据。当复选框被选中时,我使用 ng-disabled 来禁用相关字段(在我的示例中为 "Age")。

如果他们在将数据输入字段之前单击复选框,则效果很好。但是,如果他们在字段中输入数据,然后 单击复选框将其禁用,数据将同时保留在模型和视图中;它刚刚被锁定,无法更改。

这是我想做的事情:

此外,理想情况下:

我的第一个想法是我需要(我想基本上是一样的东西?):

但是,我该怎么做呢?或者有更简单的方法吗?

我已经尝试了一段时间,但找不到指令组合或其他方法来执行此操作,事实证明很难搜索到。我现在正在研究文档,但需要一些帮助。谢谢!

我会为复选框和文本框使用一个指令。

根据你的码笔,下面的年龄控制指令就可以了:

angular
  .module('example', [])
  .controller('exampleController', function($scope) {
    $scope.user = {};
  }).directive('ageControl',
    function() {
        return {
            template: '<input type="checkbox" ng-model="hideAge" ng-click="setAge()" />Hide Age<br />Age: <input type="text" ng-model="age" ng-disabled="hideAge" />',
            scope: {
              age: "="
            },
            link: function (scope, elem, attr) {
              var lastAge = null

              scope.setAge = function() {
                if (scope.hideAge) {
                lastAge = scope.age;
                scope.age = undefined;
              }  else {
                if (lastAge) {
                    scope.age = lastAge;
                }
              }
           }
        }
      }
   });

在这里工作代码笔:http://codepen.io/anon/pen/ZYxMQL

您只需要对标签进行参数化,使其适用于任何值。


更新

下面是一个指令示例,它允许复选框禁用一个或多个表单控件,从模型中删除相关值:

http://codepen.io/troywarr/pen/XJExaO?editors=101

理想的方法是使用 angular.copy() 函数。当您检查隐藏时,将数组或对象存储在 $scope 变量中。当您取消选中时,再次恢复。看到这个 example.