多个 p 树节点中的 PrimeNg 下拉列表:区分所选选项

PrimeNg dropdown in multiple p-tree nodes: Differentiating selected options

我有一个 PrimeNg p-tree

    <p-tree [value]="treeNodes" selectionMode="single" [(selection)]="selectedNode"></p-tree>

TreeNodes用ng-templates表示,其中一个模板如下。

    <ng-template let-node pTemplate="stagebased" >
        <input [(ngModel)]="node.label" type="text"  >
        <p-dropdown [options]="stages"  [(ngModel)]="stage"  optionLabel="name"></p-dropdown>
   </ng-template>

左边有一个菜单,其中有一个菜单项带有这个命令-

command: (event) => { this.addElement("<Node Label>", "stagebased") }

所以您单击一个菜单项并调用 addElement(label: string, type: string),它添加另一个 TreeNode 作为根节点的子节点。添加元素如下:

addElement(label: string, type: string) {
    var node =
    {
      label: label,
      type: type
    };
    this.selectedNode = this.treeNodes[0];
    this.selectedNode.children.push(node);
  }

到目前为止一切正常 -- 您可以多次单击 addElement 以添加多个包含输入字段和下拉列表的树节点,这些节点具有相同的 select 可用选项。

问题是,如果我 select 一个下拉菜单中的选项 - 另一个下拉菜单应用相同的选项 selected。我不能 select 一个下拉实例的不同选项而不是另一个。

如何以允许多个 selected 'stage' 项目的方式在 p-dropdown 上表达 ngModel?

谢谢

部分有或实质上有答案:

诀窍似乎是不使用 [(ngModel)] - 这看起来像是将所有选定的值绑定到一个事物上。相反,使用 onChange 事件:

     <p-dropdown [options]="stages" appendTo="body" (onChange)="onChangeEvent($event.value)" optionLabel="name"></p-dropdown>

类似

 onChangeEvent(stage: Stage) {
    console.log("stage.name = " + stage.name);
  }

因此 onChange $event.value 捕获每个或任何下拉菜单的选定值,而不是将所有下拉菜单的值绑定在一起

您可以将 [(ngModel)] 绑定到数组。每个下拉菜单都需要绑定到一个单独的模型。

所以像这样:

[(ngModel)]="selectedStages[i]"

每个新下拉列表的 i 递增。

您应该可以使用类似下面的方法来增加 i:

<div *ngFor="let x of array; let i = index; trackBy:trackByIndex">
   control here
</div>

trackByIndex(index: number, obj: any): any { return index; }

let x of array 这里就是你的主循环。