1
- import { Directive , HostBinding , HostListener , Input , Optional } from '@angular/core' ;
1
+ import { AfterViewInit , Directive , HostBinding , HostListener , Input , Optional } from '@angular/core' ;
2
2
import { DropdownService } from '../dropdown.service' ;
3
3
import { DropdownComponent } from '../dropdown/dropdown.component' ;
4
4
5
5
@Directive ( {
6
6
selector : '[cDropdownClose]' ,
7
7
exportAs : 'cDropdownClose'
8
8
} )
9
- export class DropdownCloseDirective {
9
+ export class DropdownCloseDirective implements AfterViewInit {
10
+
11
+ constructor (
12
+ private dropdownService : DropdownService ,
13
+ @Optional ( ) public dropdown ?: DropdownComponent
14
+ ) { }
10
15
11
16
/**
12
17
* Disables a dropdown-close directive.
@@ -15,10 +20,14 @@ export class DropdownCloseDirective {
15
20
*/
16
21
@Input ( ) disabled ?: boolean ;
17
22
18
- constructor (
19
- private dropdownService : DropdownService ,
20
- @Optional ( ) public dropdown ?: DropdownComponent
21
- ) { }
23
+ @Input ( ) dropdownComponent ?: DropdownComponent ;
24
+
25
+ ngAfterViewInit ( ) : void {
26
+ if ( this . dropdownComponent ) {
27
+ this . dropdown = this . dropdownComponent ;
28
+ this . dropdownService = this . dropdownComponent ?. dropdownService ;
29
+ }
30
+ }
22
31
23
32
@HostBinding ( 'class' )
24
33
get hostClasses ( ) : any {
@@ -44,13 +53,13 @@ export class DropdownCloseDirective {
44
53
45
54
@HostListener ( 'click' , [ '$event' ] )
46
55
private onClick ( $event : MouseEvent ) : void {
47
- this . dropdownService . toggle ( { visible : false , dropdown : this . dropdown } ) ;
56
+ ! this . disabled && this . dropdownService . toggle ( { visible : false , dropdown : this . dropdown } ) ;
48
57
}
49
58
50
59
@HostListener ( 'keyup' , [ '$event' ] )
51
60
private onKeyUp ( $event : KeyboardEvent ) : void {
52
61
if ( $event . key === 'Enter' ) {
53
- this . dropdownService . toggle ( { visible : false , dropdown : this . dropdown } ) ;
62
+ ! this . disabled && this . dropdownService . toggle ( { visible : false , dropdown : this . dropdown } ) ;
54
63
}
55
64
}
56
65
}
0 commit comments