Логика для флажков в mat-tree - PullRequest
       25

Логика для флажков в mat-tree

0 голосов
/ 26 февраля 2019

Попытка выяснить, как добавить логику, где, если пользователь нажимает родительский флажок, он будет щелкать по всем дочерним флажкам.Если родитель не нажал, отключите все дочерние элементы под этим родителем.Если родительский элемент включен, и пользователь хочет, чтобы один дочерний элемент был установлен в значение true.Есть идеи, как это сделать?Спасибо!

import { NestedTreeControl } from '@angular/cdk/tree';
import { Component } from '@angular/core';
import { MatTreeNestedDataSource } from '@angular/material/tree';

interface ITreeNode {
    children?: ITreeNode[];
    name: string;
    expanded: boolean;
}

const TREE_DATA = [
    {
        name: 'Land Plane',
        expanded: false,
        children: [
            { name: 'Piston', expanded: false, children: [] },
            { name: 'Jet', expanded: false, children: [] },
            { name: 'Turboprop', expanded: false, children: [] }
        ]
    },
    {
        name: 'Helicopter',
        expanded: false,
        children: [
            { name: 'Piston', expanded: false, children: [] },
            { name: 'Turboprop', expanded: false, children: [] }
        ]
    },
    {
        name: 'Amphibian',
        expanded: false,
        children: [{ name: 'Turboprop', expanded: false, children: [] }]
    },
    {
        name: 'Tiltwing',
        expanded: false,
        children: [{ name: 'Turboprop', expanded: false, children: [] }]
    },
    {
        name: 'Gyrocopter',
        expanded: false,
        children: [{ name: 'Piston', expanded: false, children: [] }]
    },
    {
        name: 'Tower',
        expanded: false,
        children: []
    },
    {
        name: 'Gyrocopter',
        expanded: false,
        children: []
    }
];

@Component({
    selector: 'globe-source-facets',
    templateUrl: './globe-source-facets.component.html',
    styleUrls: ['./globe-source-facets.component.scss']
})
export class GlobeSourceFacetsComponent {
    public nestedTreeControl: NestedTreeControl<ITreeNode>;
    public nestedDataSource: MatTreeNestedDataSource<ITreeNode>;
    indeterminate = false;
    constructor() {
        this.nestedTreeControl = new NestedTreeControl<ITreeNode>(
            this.getChildren
        );
        this.nestedDataSource = new MatTreeNestedDataSource();
        this.nestedDataSource.data = TREE_DATA;
    }

    public hasNestedChild = (_: number, nodeData: ITreeNode) =>
        nodeData.children.length > 0;

    public getChildren = (node: ITreeNode) => node.children;

    public changeState(node) {
        node.expanded = !node.expanded;
    }

    public onChange(node) {
        console.log("test");

    }
}
<div class="facets-container">
    <div class="tree-container">
        <mat-tree
            [dataSource]="nestedDataSource"
            [treeControl]="nestedTreeControl"
            class="example-tree"
        >
            <mat-tree-node *matTreeNodeDef="let node">
                <li class="mat-tree-node">
                    <button mat-icon-button disabled></button>
                    <mat-checkbox class="checklist-leaf-node" [checked]="isPublic"
                    (change)="onChange(node)">{{
                        node.name
                    }}</mat-checkbox>
                </li>
            </mat-tree-node>

            <mat-nested-tree-node
                *matTreeNodeDef="let node; when: hasNestedChild"
            >
                <li>
                    <div class="mat-tree-node">
                        <button
                            mat-icon-button
                            [attr.aria-label]="'toggle ' + node.name"
                            (click)="changeState(node)"
                        >
                            <mat-icon class="mat-icon-rtl-mirror">
                                {{
                                    node.expanded
                                        ? 'expand_more'
                                        : 'chevron_right'
                                }}
                            </mat-icon>
                        </button>
                        <mat-checkbox class="checklist-leaf-node">{{
                            node.name
                        }}</mat-checkbox>
                    </div>
                    <ul [class.example-tree-invisible]="node.expanded">
                        <ng-container matTreeNodeOutlet></ng-container>
                    </ul>
                </li>
            </mat-nested-tree-node>
        </mat-tree>
    </div>
    <div class="facet-actions">
        <button mat-button>CLEAR</button>
        <button mat-button color="primary">APPLY</button>
    </div>
</div>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...