如何使用 Angular 6 + Handsontable 根据另一个单元格值仅更改一个单元格值?

Posted

技术标签:

【中文标题】如何使用 Angular 6 + Handsontable 根据另一个单元格值仅更改一个单元格值?【英文标题】:how can i change only one cell value based on another cell value, using Angular 6 + Handsontable? 【发布时间】:2019-12-25 11:24:00 【问题描述】:

当我使用 afterChange 钩子(Angular 6 + Handsontable)并在其中使用 hot.getDataAtCell(...) 时,行中的所有单元格都会更改

我尝试使用不同的钩子(beforeChange、afterChange),但都不起作用

      if (changes && source) 
        this.newCellCol = source[0][0];
        this.newCellRow = source[0][1] + 1;
        this.newCellData = this.tempId.getDataAtCell(source[0][0], source[0][1]);
        console.log(this.newCellData);
      
    ,
    afterChange: (changes, source) => 
      if (changes && source) 
        this.tempId.setDataAtCell(this.newCellCol, this.newCellRow, this.newCellData);
      
    
  ;

我希望在它旁边的单元格中也输入附加值 但它会被添加到同一行的所有单元格中 最终的解决方案是根据一个单元格中输入的数据,将不同的计算数据插入到同一行的3个不同的单元格中

【问题讨论】:

【参考方案1】:

在 afterChange 钩子的更改数组中,您可以访问行、道具(列)、旧值和新值。您可以通过上述内容监听确切列中的更改,并且可以创建一个自定义方法,该方法将被调用,该方法将根据上述内容触发更改到您的目标单元格中​​。

 afterChanges: (changes, source) => 
     //iterate through changes
     row = changes[iterator][0]
     col = changes[iterator][1]
     oldValue = changes[iterator][2]
     newValue = changes[iterator][3]

     //listen for changes in the desired columns
     //invoke the custom method or add a block to set Data for the target cell(s)
 

此外,作为最佳实践,建议使用 setDataAtRowProp 而不是 setDataAtCell,因为前者可以灵活地同时为多个单元格设置数据。

供参考:https://handsontable.com/docs/7.2.2/Hooks.html#event:afterChange https://handsontable.com/docs/7.2.2/Core.html#setDataAtRowProp

【讨论】:

以上是关于如何使用 Angular 6 + Handsontable 根据另一个单元格值仅更改一个单元格值?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 angular-cli (6.x) 创建单一仓库项目结构

Angular 6:如何使用模板引用变量来调用子方法?

如何使用 Angular 6 中的类名更改背景颜色?

如何在 Angular CLI 6: angular.json 中添加 Sass 编译?

Angular 6 - Cordova - 如何将当前的 Angular 项目转换为基于 Cordova 的项目?

Angular 6 中的剑道网格:isEditing:如何?