从模型中删除动态禁用的值(通过`expressionProperties`)字段?

时间:2015-06-15 16:31:42

标签: angularjs angular-formly

angular-formly(我正在使用v6.4.xw / AngularJS 1.2.x)字段的表达式属性导致字段在启用和禁用之间动态切换时,切换到禁用不会删除任何先前输入的值来自模型的那个领域。例如:

  1. 使用advanced layout example from Formly
  2. 输入名字,以便启用姓氏
  3. 输入姓氏
  4. 的值
  5. 删除名字值,以便再次禁用姓氏
  6. 请注意,该模型仍包含为姓氏输入的数据,即使已停用
  7. 鉴于disabled如何适用于标准HTML表单提交,我希望模型不再包含该字段的值。

    我需要避免为已禁用的字段提交数据,因此如果这是预期的行为(并且我知道它是......),有人可以提供有关的信息吗?如果expressionProperties导致字段被禁用,如何完成值的删除?

1 个答案:

答案 0 :(得分:1)

kentcdodds'评论让我朝着正确的方向前进,并且能够在文档中找到足够多的内容来使某些东西发挥作用。在我最紧迫的任务中,我需要一个无线电选项,以便在禁用时从模型中删除,我最终也取消了它。我通过扩展radio输入类型并添加link函数来访问scopeelement来实现此目的。以下是它的外观:

app.config(['formlyConfigProvider', function (formlyConfigProvider) {
    formlyConfigProvider.setType({
        name: 'liveDisableRadio',
        extends: 'radio',
        link: function (scope, element) {
            scope.$watch('to.disabled', function (is_disabled) {
                if (is_disabled) {
                    delete scope.model[scope.options.key];
                    element.find(':radio:checked').prop('checked', false).trigger('change');
                }
            });
        }
    });
}])