AngularJS 表单。 JSON中的可选属性[重复]

Posted

技术标签:

【中文标题】AngularJS 表单。 JSON中的可选属性[重复]【英文标题】:AngularJS form. Optional properties in JSON [duplicate] 【发布时间】:2017-04-11 08:10:03 【问题描述】:

我有一个包含多个字段的搜索表单。如果用户在字段中没有输入任何内容,它仍然会被发送到值为“null”的服务器。 但是,此表单中大约有 25 个可选(高级)字段,如果用户没有在其中输入任何内容,则 JSON 根本不应该包含此字段。 所以,我的问题是:有什么方法(也许是模式)可以避免那些 25 个“if () else”吗?形成最终 JSON 的最佳方式是什么? 谢谢!

更新: 谢谢@RIYAJKHAN 的回答! 我已经使用 LoDash 自己解决了这个问题:

   private compactObject(obj) 
      let compactObj = this.removeEmptyProperties(_.cloneDeep(obj));
      _.forEach(compactObj, (value, key) => 
        if (_.isObject(value)) 
          compactObj[key] = this.compactObject(this.removeEmptyProperties(compactObj[key]));
        
      );
      return this.removeEmptyProperties(compactObj);
    ;

    private removeEmptyProperties(obj) 
      let trimedObj = _.cloneDeep(obj);
      _.forEach(trimedObj, (value, key) => 
        if (!value || _.isEmpty(trimedObj[key])) 
          delete trimedObj[key];
        
      );
      return trimedObj;
    

【问题讨论】:

将它们作为 null 发送到服务器有什么问题? 【参考方案1】:
<form name="form" ng-submit="submit(form)">

    <input type="text" name="test1" ng-model="test1">
    <input type="text" name="test2" ng-model="test2">
    <input type="text" name="test3" ng-model="test3">

<input type="button" name="submit"> 
</form>

javascript

$scope.submit = function(form)

    for(var prop in form)
        if(!!!form[prop])
                delete form[prop];
        
    //form will contain form prop having only valid values

【讨论】:

以上是关于AngularJS 表单。 JSON中的可选属性[重复]的主要内容,如果未能解决你的问题,请参考以下文章

可选类中的可选属性 VS 可选字典中的可选值

Django 过滤器是不是存在 json 中的可选键

(新格式)Visual Studio 项目中的可选 appsettings.local.json

Swift 中的可选闭包属性

Oracle 10g 中的可选条件

打字稿中的可选属性类