66import {
77 ChangeDetectionStrategy ,
88 Component ,
9+ ElementRef ,
910 EventEmitter ,
1011 Input ,
12+ NgZone ,
1113 OnChanges ,
14+ OnInit ,
1215 Output ,
1316 SimpleChanges
1417} from '@angular/core' ;
18+ import { fromEvent } from 'rxjs' ;
19+ import { filter , takeUntil } from 'rxjs/operators' ;
1520
21+ import { NzDestroyService } from 'ng-zorro-antd/core/services' ;
1622import { BooleanInput } from 'ng-zorro-antd/core/types' ;
1723import { InputBoolean } from 'ng-zorro-antd/core/util' ;
1824
@@ -25,30 +31,29 @@ import { NzTreeNodeComponent } from './node';
2531 host : {
2632 class : 'ant-tree-node-content-wrapper' ,
2733 '[class.ant-tree-node-content-wrapper-open]' : 'isExpanded' ,
28- '[class.ant-tree-node-selected]' : 'nzSelected' ,
29- '(click)' : 'onClick($event)'
30- }
34+ '[class.ant-tree-node-selected]' : 'nzSelected'
35+ } ,
36+ providers : [ NzDestroyService ]
3137} )
32- export class NzTreeNodeOptionComponent < T > implements OnChanges {
38+ export class NzTreeNodeOptionComponent < T > implements OnChanges , OnInit {
3339 static ngAcceptInputType_nzSelected : BooleanInput ;
3440 static ngAcceptInputType_nzDisabled : BooleanInput ;
3541
3642 @Input ( ) @InputBoolean ( ) nzSelected = false ;
3743 @Input ( ) @InputBoolean ( ) nzDisabled = false ;
3844 @Output ( ) readonly nzClick = new EventEmitter < MouseEvent > ( ) ;
3945
40- constructor ( private treeNode : NzTreeNodeComponent < T > ) { }
46+ constructor (
47+ private ngZone : NgZone ,
48+ private host : ElementRef < HTMLElement > ,
49+ private destroy$ : NzDestroyService ,
50+ private treeNode : NzTreeNodeComponent < T >
51+ ) { }
4152
4253 get isExpanded ( ) : boolean {
4354 return this . treeNode . isExpanded ;
4455 }
4556
46- onClick ( e : MouseEvent ) : void {
47- if ( ! this . nzDisabled ) {
48- this . nzClick . emit ( e ) ;
49- }
50- }
51-
5257 ngOnChanges ( changes : SimpleChanges ) : void {
5358 const { nzDisabled, nzSelected } = changes ;
5459 if ( nzDisabled ) {
@@ -67,4 +72,17 @@ export class NzTreeNodeOptionComponent<T> implements OnChanges {
6772 }
6873 }
6974 }
75+
76+ ngOnInit ( ) : void {
77+ this . ngZone . runOutsideAngular ( ( ) =>
78+ fromEvent < MouseEvent > ( this . host . nativeElement , 'click' )
79+ . pipe (
80+ filter ( ( ) => ! this . nzDisabled && this . nzClick . observers . length > 0 ) ,
81+ takeUntil ( this . destroy$ )
82+ )
83+ . subscribe ( event => {
84+ this . ngZone . run ( ( ) => this . nzClick . emit ( event ) ) ;
85+ } )
86+ ) ;
87+ }
7088}
0 commit comments