Динамический переключатель Angular material с возможностью выбора нескольких, но должен разрешаться только один раз в группе

#angular #radio-button #angular-material #radio-group

#angular #переключатель #angular-material #радиогруппа

Вопрос:

У меня есть дерево angular-material с возможностью создания флажков и переключателей динамически на основе массива

Массив следующим образом:

 {
    "Documents": {
      "angular": {
        "src": {
          "core": 0,
          "compiler": 0
        }
      },
      "material2": {
        "src": {
          "button": 1,
          "checkbox": 1,
          "input": 1
        }
      }
    }............................etc
}
  

html-часть следующим образом:

 <mat-tree [dataSource]="dataSource" [treeControl]="treeControl" class="example-tree">
  <mat-tree-node *matTreeNodeDef="let node" matTreeNodeToggle matTreeNodePadding>
    <div *ngIf="node.type;else other_content"> <!--- node.type == 1 then checkbox!-->
      <mat-checkbox>Check me!</mat-checkbox>
</div>

<ng-template #other_content><!--- node.type ==0 then radio button!-->
  <mat-radio-group>
  <mat-radio-button value=" {{node.filename}}">{{node.filename}}</mat-radio-button>
</mat-radio-group>
</ng-template>

  </mat-tree-node>

  <mat-tree-node *matTreeNodeDef="let node;when: hasChild" matTreeNodePadding>
    <button mat-icon-button matTreeNodeToggle
            [attr.aria-label]="'toggle '   node.filename">
      <mat-icon>
        {{treeControl.isExpanded(node) ? 'expand_more' : 'chevron_right'}}
      </mat-icon>
    </button>
    {{node.filename}} : {{node.type}}
  </mat-tree-node>
</mat-tree>
  

Пример ссылки на угловое дерево

Это выглядит следующим образом:

введите описание изображения здесь

Проблема в том, что, как показано на рисунке, я могу проверить все переключатели на определенном уровне дерева. Но он должен разрешать только один переключатель из группы переключателей.

Проблема возникает из-за приведенного ниже:

 <loop .....>

<mat-radio-group>
  <mat-radio-button value=" {{node.filename}}">{{node.filename}}</mat-radio-button>
</mat-radio-group>
</loop end>
  

Но за одну итерацию создается один набор <mat-radio-group> , но он должен создаваться, как показано ниже:

 <mat-radio-group>
      loop through <mat-radio-button>
    </mat-radio-group>
  

Что мне следует сделать, чтобы в определенной группе можно было выбрать только переключатель?

Ответ №1:

Вы пытались поместить mat-radio-group за пределы mat-tree? Что-то вроде

 <mat-radio-group>
    <mat-tree>
       <mat-tree-node>
            <mat-radio-button></mat-radio-button>
        </mat-tree-node>
    </mat-tree>
</mat-radio-group>
  

Ответ №2:

 <!-- 
You need to set name to be unique for every radio button.
If there are more radio buttons with the same name they will become a group.
-->
<mat-radio-button
 *ngFor="let btn of this.radioButtons"
 [name]="btn.Id"
 [checked]="btn.checked"
>
</mat-radio-button>