首页 > 解决方案 > 我可以使用 cellRendererSelector 为每一行提供自己的 cellRenderer

问题描述

我正在尝试解决此问题:
您能否为 ag-grid Angular 中的不同行指定不同的 customCellRenderer

ag-grid的文档中,我发现了一些可能有帮助的东西;在Many Renderers One Column部分下,他们展示了与我的需求有点相似的东西(请参阅plunker 项目)。

在这个特定的部分:

cellRendererSelector: function(params) {
  var moodDetails = {
    component: 'moodCellRenderer'
  };

  var genderDetails = {
    component: 'genderCellRenderer',
    params: {
      values: ['Male', 'Female']
    }
  };

  if (params.data.type === 'gender')
    return genderDetails;
  else if (params.data.type === 'mood')
    return moodDetails;
  else
    return null;
}

以这种方式工作:
多个渲染器一列示例

在他们的示例中,他们根据在同一行的另一列中选择的值呈现单元格。
直觉上,我尝试了以下方法:

if (params.node.id === 1)
    return genderDetails;
else if (params.node.id === 5)
    return moodDetails;
else
    return null;

我认为这应该有效,但它没有:

多个渲染器一列实现

知道为什么这不起作用吗?

标签: angularag-gridag-grid-ng2ag-grid-angular

解决方案


你几乎明白了!

代码的唯一问题是node.ids 是 type string,而您尝试将它们与numbers 进行比较。

要修复它,请更新cellRendererSelector条件以测试字符串:

if (params.node.id === '1')
    return genderDetails;
else if (params.node.id === '5')
    return moodDetails;
else
    return null;

请注意,宽松的比较也可以:

if (params.node.id == 1)
    // and so on...

…因为在比较之前数字将被强制转换为字符串。不过,我建议不要这样做,当您忘记为什么将==其放在首位时,它可能会成为一个陷阱:)


推荐阅读