我想发布来自已检查产品的值,即使用户将这些字段留空

Posted

技术标签:

【中文标题】我想发布来自已检查产品的值,即使用户将这些字段留空【英文标题】:I want to post the values that comes from checked product even the user leaves empty those fields 【发布时间】:2020-04-07 20:09:57 【问题描述】:

我有一个表格来列出用户输入的产品。它具有属性 使用编辑按钮更新产品功能。并显示 确认对话框面板(引导模型)。在编辑面板中,我可以得到 并在输入字段中显示检查产品的值。但如果有些 输入字段留空,仅更新输入字段。我想要 发布来自已检查产品的值,甚至是用户 将这些字段留空。

**html **

    <tr>
      <td><input type="checkbox" class="checkall" id="checked" (change)="selectCheckbox($event,product)" />
      </td>

      <td id="tableCat">product.category</td>
      <td id="tableName">product.name</td>
      <td id="tableDesc">product.description</td>
      <td id="tablePrice">product.price</td>

      <td>

        <p data-placement="top" data-toggle="tooltip" title="Edit"><button class="btn btn-primary btn-xs"
            (click)="sendingValue()" data-title="Edit" data-toggle="modal" data-target="#edit"><i
              class="fas fa-edit fa-xs"></i></button>
        </p>
      </td>
      <td>
        <p data-placement="top" data-toggle="tooltip" title="Delete"><button class="btn btn-danger btn-xs"
            data-title="Delete" data-toggle="modal" data-target="#delete"><i
              class="far fa-trash-alt fa-xs"></i></button></p>
      </td>
    </tr>
  </tbody>
productUpdateForm.value|json 更新

正在检查产品数据 .TS

chkSelected: Array<any> = [];
 selectedName: any;
  selectedDesc: any;
  selectedPrice: any;
  selectedCat: any;

  selectCheckbox(event, val) 
    if (event.target.checked === true) 
      this.chkSelected = val._id;
      this.selectedName = val.name;
      this.selectedDesc = val.description;
      this.selectedCat = val.category;
      this.selectedPrice = val.price;
    
    //  else 
    //   const index = this.chkSelected.indexOf(val);
    //   this.chkSelected.splice(index, 1);
    // 
    console.log(this.chkSelected);
  

  init() 

    this.productUpdateForm = this.fb.group(
      name: ['', Validators.required],
      description: ['', Validators.required],
      price: ['', Validators.required],
      category: ['', Validators.required],
      _id: ['', Validators.required]
    );
  

 UpdateProduct() 
    this.menuService.updateProduct(this.productUpdateForm.value).subscribe((data) => 
      console.log(data);
      this.productUpdateForm.reset();
      this.socket.emit('refresh', );
      jQuery('#edit').modal('hide');
    );
  
  sendingValue() 
    jQuery('#updateName').val(this.selectedName);
    jQuery('#updateDesc').val(this.selectedDesc);
    jQuery('#updatePrice').val(this.selectedPrice);
    jQuery('#updateCat').val(this.selectedCat);
    console.log(this.selectedName);
  

服务

 updateProduct(body): Observable<any> 
    return this.http.put(BASEURL + '/menu/update-product/' + body._id, body);
  

更新产品的端点

 updateProduct(req, res) 
    Menu.update(
       company: req.company._id, "products._id": req.params._id ,
      
        $set: 
          "products.$": 
            name: req.body.name,
            description: req.body.description,
            price: req.body.price,
            category: req.body.category
          
        
      ,
       new: true 
    )
      .then(info => 
        res.status(httpStatus.OK).json( message: "product updated", info );
      )
      .catch(err => 
        res
          .status(httpStatus.INTERNAL_SERVER_ERROR)
          .json( message: "product update error", err );
      );
  

【问题讨论】:

【参考方案1】:

我做到了,但我认为这不是一个好的编码方式。我用 [(ngModel)] 对于每个更新表单字段..但它警告我:

**It looks like you're using ngModel on the same form field as formControlName. 
Support for using the ngModel input property and ngModelChange event with** 

我不知道如何解决这个问题。

【讨论】:

以上是关于我想发布来自已检查产品的值,即使用户将这些字段留空的主要内容,如果未能解决你的问题,请参考以下文章

将字段留空更好还是用空填充?

验证文本字段

如果文本字段留空,如何向用户显示通知

当字段值之一错误或留空时,不想提交表单

即使缺少所需的值,Django 验证也会调用 clean()

如何检查扫描字符串的第一个字符,即使它是空的?