Skip to content

Commit f5f489b

Browse files
committed
use host:{} for mat tree and hostbinding for cdk tree
1 parent ffff172 commit f5f489b

File tree

6 files changed

+25
-16
lines changed

6 files changed

+25
-16
lines changed

src/cdk/tree/nested-node.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ import {getTreeControlFunctionsMissingError} from './tree-errors';
3838
]
3939
})
4040
export class CdkNestedTreeNode<T> extends CdkTreeNode<T> implements AfterContentInit, OnDestroy {
41+
// tslint:disable:no-host-decorator-in-concrete
4142
@HostBinding('attr.aria-expanded') _expanded = this.isExpanded;
4243
@HostBinding('attr.role') _role = this.role;
4344

src/cdk/tree/tree.ts

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ import {
6565
changeDetection: ChangeDetectionStrategy.Default
6666
})
6767
export class CdkTree<T> implements AfterContentChecked, CollectionViewer, OnDestroy, OnInit {
68+
// tslint:disable:no-host-decorator-in-concrete
6869
@HostBinding('attr.role') _role = 'tree';
6970

7071
/** Subject that emits when the component has been destroyed. */
@@ -304,7 +305,8 @@ export class CdkTreeNode<T> implements FocusableOption, OnDestroy, OnInit {
304305
/**
305306
* The role of the node should always be 'treeitem'.
306307
*/
307-
// TODO: mark as deprecated
308+
// TODO: mark as deprecated
309+
// tslint:disable:no-host-decorator-in-concrete
308310
@HostBinding('attr.role') @Input() role: 'treeitem' | 'group' = 'treeitem';
309311

310312
/**
@@ -332,6 +334,7 @@ export class CdkTreeNode<T> implements FocusableOption, OnDestroy, OnInit {
332334
}
333335
protected _data: T;
334336

337+
// tslint:disable:no-host-decorator-in-concrete
335338
@HostBinding('attr.aria-expanded') get isExpanded(): boolean {
336339
return this._tree.treeControl.isExpanded(this._data);
337340
}
@@ -388,13 +391,11 @@ export class CdkTreeNode<T> implements FocusableOption, OnDestroy, OnInit {
388391
}
389392
if (!parent) {
390393
throw Error('Incorrect tree structure containing detached node.');
391-
}
392-
if (parent.classList.contains('cdk-nested-tree-node')) {
394+
} else if (parent.classList.contains('cdk-nested-tree-node')) {
393395
return parseInt(parent.getAttribute('aria-level')!);
394-
} else if (parent.classList.contains('cdk-tree')) {
395-
return 0;
396396
} else {
397-
throw Error(`Incorrect tree structure containing ${parent.className}.`);
397+
// parent.classList.contains('cdk-tree')
398+
return 0;
398399
}
399400
}
400401
}

src/material/tree/node.ts

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ import {
1818
Attribute,
1919
Directive,
2020
ElementRef,
21-
HostBinding,
2221
Input,
2322
IterableDiffers,
2423
OnDestroy,
@@ -43,13 +42,16 @@ const _MatTreeNodeMixinBase: HasTabIndexCtor & CanDisableCtor & typeof CdkTreeNo
4342
selector: 'mat-tree-node',
4443
exportAs: 'matTreeNode',
4544
inputs: ['disabled', 'tabIndex'],
45+
host: {
46+
'[attr.aria-expanded]': 'isExpanded',
47+
'[attr.role]': 'role',
48+
},
4649
providers: [{provide: CdkTreeNode, useExisting: MatTreeNode}]
4750
})
4851
export class MatTreeNode<T> extends _MatTreeNodeMixinBase<T>
4952
implements CanDisable, HasTabIndex {
50-
@HostBinding('attr.role') @Input() role: 'treeitem' | 'group' = 'treeitem';
53+
@Input() role: 'treeitem' | 'group' = 'treeitem';
5154

52-
@HostBinding('attr.aria-expanded') _expanded = this.isExpanded;
5355

5456
constructor(protected _elementRef: ElementRef<HTMLElement>,
5557
protected _tree: CdkTree<T>,
@@ -84,6 +86,10 @@ export class MatTreeNodeDef<T> extends CdkTreeNodeDef<T> {
8486
@Directive({
8587
selector: 'mat-nested-tree-node',
8688
exportAs: 'matNestedTreeNode',
89+
host: {
90+
'[attr.aria-expanded]': 'isExpanded',
91+
'[attr.role]': 'role',
92+
},
8793
providers: [
8894
{provide: CdkNestedTreeNode, useExisting: MatNestedTreeNode},
8995
{provide: CdkTreeNode, useExisting: MatNestedTreeNode},
@@ -92,9 +98,6 @@ export class MatTreeNodeDef<T> extends CdkTreeNodeDef<T> {
9298
})
9399
export class MatNestedTreeNode<T> extends CdkNestedTreeNode<T> implements AfterContentInit,
94100
OnDestroy {
95-
@HostBinding('attr.aria-expanded') _expanded = this.isExpanded;
96-
@HostBinding('attr.role') _role = this.role;
97-
98101
@Input('matNestedTreeNode') node: T;
99102

100103
/** Whether the node is disabled. */

src/material/tree/tree.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ import {
1212
ChangeDetectorRef,
1313
Component,
1414
ElementRef,
15-
HostBinding,
1615
IterableDiffers,
1716
ViewChild,
1817
ViewEncapsulation
@@ -26,6 +25,9 @@ import {MatTreeNodeOutlet} from './outlet';
2625
selector: 'mat-tree',
2726
exportAs: 'matTree',
2827
template: `<ng-container matTreeNodeOutlet></ng-container>`,
28+
host: {
29+
'role': 'tree',
30+
},
2931
styleUrls: ['tree.css'],
3032
encapsulation: ViewEncapsulation.None,
3133
// See note on CdkTree for explanation on why this uses the default change detection strategy.
@@ -34,8 +36,6 @@ import {MatTreeNodeOutlet} from './outlet';
3436
providers: [{provide: CdkTree, useExisting: MatTree}]
3537
})
3638
export class MatTree<T> extends CdkTree<T> {
37-
@HostBinding('attr.role') _role = 'tree';
38-
3939
// Outlets within the tree's template where the dataNodes will be inserted.
4040
@ViewChild(MatTreeNodeOutlet, {static: true}) _nodeOutlet: MatTreeNodeOutlet;
4141

tools/public_api_guard/cdk/tree.d.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@ export declare class CdkNestedTreeNode<T> extends CdkTreeNode<T> implements Afte
2424
protected _children: T[];
2525
protected _differs: IterableDiffers;
2626
protected _elementRef: ElementRef<HTMLElement>;
27+
_expanded: boolean;
28+
_role: "treeitem" | "group";
2729
protected _tree: CdkTree<T>;
2830
nodeOutlet: QueryList<CdkTreeNodeOutlet>;
2931
constructor(_elementRef: ElementRef<HTMLElement>, _tree: CdkTree<T>, _differs: IterableDiffers);
@@ -38,6 +40,7 @@ export declare class CdkNestedTreeNode<T> extends CdkTreeNode<T> implements Afte
3840
export declare class CdkTree<T> implements AfterContentChecked, CollectionViewer, OnDestroy, OnInit {
3941
_nodeDefs: QueryList<CdkTreeNodeDef<T>>;
4042
_nodeOutlet: CdkTreeNodeOutlet;
43+
_role: string;
4144
get dataSource(): DataSource<T> | Observable<T[]> | T[];
4245
set dataSource(dataSource: DataSource<T> | Observable<T[]> | T[]);
4346
trackBy: TrackByFunction<T>;
@@ -46,7 +49,7 @@ export declare class CdkTree<T> implements AfterContentChecked, CollectionViewer
4649
start: number;
4750
end: number;
4851
}>;
49-
constructor(_differs: IterableDiffers, _changeDetectorRef: ChangeDetectorRef);
52+
constructor(_differs: IterableDiffers, _changeDetectorRef: ChangeDetectorRef, _elementRef: ElementRef<HTMLElement>);
5053
_getNodeDef(data: T, i: number): CdkTreeNodeDef<T>;
5154
insertNode(nodeData: T, index: number, viewContainer?: ViewContainerRef, parentData?: T): void;
5255
ngAfterContentChecked(): void;

tools/public_api_guard/material/tree.d.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ export declare class MatNestedTreeNode<T> extends CdkNestedTreeNode<T> implement
1717

1818
export declare class MatTree<T> extends CdkTree<T> {
1919
_nodeOutlet: MatTreeNodeOutlet;
20+
constructor(_differs: IterableDiffers, _changeDetectorRef: ChangeDetectorRef, _elementRef: ElementRef<HTMLElement>);
2021
static ɵcmp: i0.ɵɵComponentDefWithMeta<MatTree<any>, "mat-tree", ["matTree"], {}, {}, never, never>;
2122
static ɵfac: i0.ɵɵFactoryDef<MatTree<any>, never>;
2223
}

0 commit comments

Comments
 (0)