具有真实示例的 Angular Material 树复选框

标签 angular checkbox tree angular-material checkboxtree

我看到了几乎所有关于如何使用 Angular Material 树复选框的示例,例如 official examplethis .
在这个例子中使用了字符串数组结构。但是如何将真正的嵌套对象数组结构转换为 Angular Material 树复选框?
我的结构:

enter image description here

当您看到从服务器接收到的数据时,告诉客户端哪个项目的复选框值为真。并且“Id”必须绑定(bind)到树,因为我在用户提交表单时将此字段发送到服务器。
这个结构正确吗?以及如何映射到 Angular Material 树方格框。
我想必须更改 official example 中的“buildFileTree()”或“transformer()”方法.因为当我用官方示例“TREE-DATA”替换我的“TREE-DATA”时;然后我看到跟随树作为结果。

enter image description here

Angular 版本(7.0.0) Angular Material 版本(6.4.7)

最佳答案

最后我解决了这个问题,我在this place中写了一个示例

如何解决?
如我所料;我必须在“buildFileTree()”和“transformer()”中写一些更改。

buildFileTree(obj: {[key: string]: any}, level: number): TodoItemNode[] {
return Object.keys(obj).reduce<TodoItemNode[]>((accumulator, key) => {
  const item = obj[key];
  const node = new TodoItemNode();
  node.label = obj[key].name;
  node.id = obj[key].id;
  node.isChecked=  obj[key].isChecked;
  node.claimId=  obj[key].claimId;
  node.isPlanType=  obj[key].isPlanType;

  if (item != null) {
    if (typeof item === 'object'  && item.children!= undefined) { 


      node.children = this.buildFileTree(item.children, level + 1);
    } else {
      node.label = item.name;
    }
  }

  return accumulator.concat(node);
}, []);}

  transformer = (node: TodoItemNode, level: number) => {
const existingNode = this.nestedNodeMap.get(node);
const flatNode = existingNode && existingNode.label === node.label
    ? existingNode
    : new TodoItemFlatNode();
flatNode.label = node.label;
flatNode.level = level;
flatNode.id=node.id;
 flatNode.isChecked = node.isChecked;
 flatNode.claimId = node.claimId;
 flatNode.isPlanType = node.isPlanType;
flatNode.expandable = !!node.children;
this.flatNodeMap.set(flatNode, node);
this.nestedNodeMap.set(node, flatNode);
return flatNode;  }

关于具有真实示例的 Angular Material 树复选框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63750852/

相关文章:

angular - 使用 Rendertron 进行服务器端渲染 - 没有 firebase 的 Angular 5

即使模型更改,Angular 4 复选框状态也不会更新

html - 在 Angular2 中选中复选框时启动事件

ruby-on-rails - 我如何选择包含他们的 child 的分类单元 - Spree 电子商务(Ruby on Rails)

javascript - 如何增加 D3 可折叠树中子节点之间的距离?

angular - 在 Angular 2 应用程序开始使用 AoT 之前从数据库加载配置

json - Angular2 Http.Post - 如何查看 webapi 响应

c++ - 树形图的直径

javascript - 如何创建具有多个输入字段的 Angular 2 自定义组件

html - 试图防止自定义复选框在选中时跳转