【问题标题】:Transferring row data from between two tables in angular using angular material使用角度材料以角度在两个表之间传输行数据
【发布时间】:2018-10-26 11:00:42
【问题描述】:

我创建了一个示例 Angular 应用程序,我将 TableComponent 作为我的主页,并且我在 TableComponent 中有一个弹出窗口。

当我点击主页中的 OpenPopup 按钮时,我会看到一个带有两个表格的弹出窗口。

第一个表有一个数据行列表,我的第二个表是空的。当我将第一个表中的行传输到第二个表并单击 save 按钮时,第二个表中的数据行将显示在主页表上。

但我的问题是当我第二次打开弹出窗口时,第二个表没有显示之前选择的行并且是空的。

请访问我的sample app here..

谁能告诉我我在这里缺少什么...?

【问题讨论】:

  • 可能是您在打开弹出窗口时清除了您的余额
  • 不是我还没有清除..
  • 请查看我修改后的答案和解决方案。

标签: angular angular-material


【解决方案1】:

ELEMENT_DATA 是 OpenPopup 类范围之外的 CONST,这就是为什么当您完成拼接 this.checkedData.splice(index,1) 时,您实际上是在改变或修改 ELEMENT_DATA const 中的数据并且它正在维护状态。

class OpenPopup 每次打开弹出窗口时都会被实例化,并且因为您正在执行以下操作,所以您在弹出窗口打开时将 checkedDataSource 重新初始化为 []。

 checkedData = [];
 checkedDataSource = new MatTableDataSource<Element>(this.checkedData);

修订:

您需要为checkedData 复制ELEMENT_DATA。

  • 将以下内容添加到您的 stackblitz 示例中。

    const ELEMENT_DATA: Element[] = [
    { position: 1, name: 'Hydrogen', weight: 1.0079, symbol: 'H' },
    { position: 2, name: 'Helium', weight: 4.0026, symbol: 'He' },
    { position: 3, name: 'Lithium', weight: 6.941, symbol: 'Li' },
    { position: 4, name: 'Beryllium', weight: 9.0122, symbol: 'Be' },
    { position: 5, name: 'Boron', weight: 10.811, symbol: 'B' }
    ];
    
    const CHECKED_DATA: Element[] = [];
    

然后在你的 OpenPopup 类中

checkedData = Object.assign(CHECKED_DATA);

【讨论】:

  • 但我又面临一个问题...当我第二次打开弹出窗口并单击关闭图标时,现在我的主表中的数据,即父页面中的数据再次被删除。只有当我点击保存按钮时,它才会保留以前的状态..
  • 请查看此链接stackblitz.com/edit/…....
  • 这里我试图解决这个问题,因为你说我要为弹出的第二个表做这件事..但我无法完成
  • 请针对这个问题提出一个新问题(因为这个问题已经解决/回答了),我或 SO 的其他成员会看看。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-07-24
  • 2019-04-24
  • 1970-01-01
  • 2017-01-03
  • 1970-01-01
  • 2018-09-11
  • 1970-01-01
相关资源
最近更新 更多