【问题标题】:How to create tree view inside the dropdown using angular material?如何使用角度材料在下拉列表中创建树视图?
【发布时间】:2020-11-23 12:24:57
【问题描述】:

谁能告诉我,如何在下拉菜单中创建树视图。下拉值将从 json 的 rest api 调用中获取,如下所示。并且 subchild 也可能包含更多级别的 child。

我必须在此处执行自动建议以执行来自父级和子级的过滤器。

 VehicleList = [
      {
        parent: "audi",
        child: [{
          type: 'G-audiA',
          subchild: [{
              id: 1,
              name: 'type audi A1'
          }, {
              id: 2,
              name: 'type audi A2'
          }]
        }, {
          type: 'G-audiB',
          subchild: [{
              id: 1,
              name: 'type audi B1'
          }, {
              id: 2,
              name: 'type audi B2'
          }]
        }]
      }, {
        parent: "bmw",
        child: [{
          type: 'G-bmwA',
          subchild: [{
              id: 1,
              name: 'type bmw A1'
          }, {
              id: 2,
              name: 'type bmw A2'
          }]
        }, {
          type: 'G-bmwB',
          subchild: [{
              id: 1,
              name: 'type bmw B1'
          }, {
              id: 2,
              name: 'type bmw B2'
          }]
        }]
  }]

任何人的帮助将不胜感激!!!

【问题讨论】:

    标签: javascript angular typescript angular-material


    【解决方案1】:

    基于Angular Material Tree 文档中的第一个示例,我设法构建了一个下拉菜单,其中包含如下所示的树形结构:

    显示树的技巧是添加一个禁用/空选项。我用它作为标签。树取自他们的示例,所以我根本没有修改它,您可以修改节点结构以匹配您自己的。

    为了在下拉列表的标签中显示选定的项目,您可以创建一个方法,将选定的项目返回一个字符串,因为它们的SelectionModel 对象具有 selected 属性,该属性将返回所有选定的节点。

    /** The selection for checklist */
    checklistSelection = new SelectionModel<TodoItemFlatNode>(
        true /* multiple */
    );
    

    为了从树中获取选定的项目:

    return this.checklistSelection.selected.map(s => s.item).join(",");
    

    对于过滤部分,我认为您可以查看此answer。 希望这会有所帮助!

    Stackblitz

    编辑:如果你选择了一个孩子,即使它的所有孩子都没有被选中,父母也会被选中并添加到 SelectionModel 中。如果您不希望此行为评论函数descendantsPartiallySelected。这不会选中复选框,因此除非选择所有子级,否则不会在 SelectionModel 中添加父级

    【讨论】:

    • @loana Voicu 无法按父/子过滤。在输入父母姓名时,孩子姓名列表也应该出现。同样,如果我们输入子名,父名也会被过滤掉..??
    • 我通过向 ChecklistDatabase 类添加一个实际过滤树的方法来更新 stackblitz。该方法在输入更改时调用。我还稍微修改了树结构。请看看新的解决方案:) stackblitz.com/edit/…
    • @Loana here 如果我选择父级/二级子级,我只需要在占位符中绑定三级子级名称。我无法获得仅绑定第三级的解决方案。你能告诉我这可能吗?
    猜你喜欢
    • 1970-01-01
    • 2019-05-13
    • 1970-01-01
    • 2019-10-19
    • 1970-01-01
    • 1970-01-01
    • 2019-12-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多