@@ -40,77 +40,82 @@ export interface IDemoNgComponentEventType {
40
40
}
41
41
42
42
// ng-template-ref.component.ts
43
- import {
44
- AfterViewInit ,
45
- Component ,
46
- OnInit ,
47
- TemplateRef ,
48
- ViewChild ,
49
- } from " @angular/core" ;
50
- import { ADTSettings } from " angular-datatables/src/models/settings" ;
51
- import { Subject } from " rxjs" ;
52
- import { IDemoNgComponentEventType } from " ./demo-ng-template-ref-event-type" ;
53
- import { DemoNgComponent } from " ./demo-ng-template-ref.component" ;
43
+
44
+ import { AfterViewInit , Component , OnInit , TemplateRef , ViewChild } from ' @angular/core' ;
45
+ import { ADTSettings , } from ' angular-datatables/src/models/settings' ;
46
+ import { Subject } from ' rxjs' ;
47
+ import { IDemoNgComponentEventType } from ' ./demo-ng-template-ref-event-type' ;
48
+ import { DemoNgComponent } from ' ./demo-ng-template-ref.component' ;
54
49
55
50
@Component ({
56
- selector: " app-using-ng-template-ref" ,
57
- templateUrl: " ./using-ng-template-ref.component.html" ,
51
+ selector: ' app-using-ng-template-ref' ,
52
+ templateUrl: ' ./using-ng-template-ref.component.html' ,
58
53
})
59
54
export class UsingNgTemplateRefComponent implements OnInit , AfterViewInit {
60
- constructor () {}
61
55
62
- pageTitle = " Using Angular TemplateRef" ;
63
- mdIntro = " assets/docs/advanced/using-ng-template-ref/intro.md" ;
64
- mdHTML = " assets/docs/advanced/using-ng-template-ref/source-html.md" ;
65
- mdTS = " assets/docs/advanced/using-ng-template-ref/source-ts.md" ;
56
+ constructor () { }
66
57
67
- dtOptions: ADTSettings = {};
68
- dtTrigger = new Subject ();
58
+ pageTitle = ' Using Angular TemplateRef' ;
59
+ mdIntro = ' assets/docs/advanced/using-ng-template-ref/intro.md' ;
60
+ mdHTML = ' assets/docs/advanced/using-ng-template-ref/source-html.md' ;
61
+ mdTS = ' assets/docs/advanced/using-ng-template-ref/source-ts.md' ;
69
62
70
- @ViewChild (" demoNg" ) demoNg: TemplateRef <DemoNgComponent >;
63
+ dtOptions: ADTSettings = {};
64
+ dtTrigger: Subject <ADTSettings > = new Subject <ADTSettings >();
71
65
72
- ngOnInit(): void {}
66
+ @ViewChild (' demoNg' ) demoNg: TemplateRef <DemoNgComponent >;
67
+ message = ' ' ;
73
68
74
- ngAfterViewInit() {
75
- const self = this ;
76
- this .dtOptions = {
77
- ajax: " data/data.json" ,
78
- columns: [
79
- {
80
- title: " ID" ,
81
- data: " id" ,
82
- },
83
- {
84
- title: " First name" ,
85
- data: " firstName" ,
86
- },
87
- {
88
- title: " Last name" ,
89
- data: " lastName" ,
90
- },
91
- {
92
- title: " Actions" ,
93
- data: null ,
94
- defaultContent: " " ,
95
- ngTemplateRef: {
96
- ref: this .demoNg ,
97
- context: {
98
- // needed for capturing events inside <ng-template>
99
- captureEvents: self .onCaptureEvent .bind (self ),
100
- },
69
+ ngOnInit(): void {
70
+ // use setTimeout as a hack to ensure the `demoNg` is usable in the datatables rowCallback function
71
+ setTimeout (() => {
72
+ const self = this ;
73
+ this .dtOptions = {
74
+ ajax: ' data/data.json' ,
75
+ columns: [
76
+ {
77
+ title: ' ID' ,
78
+ data: ' id'
79
+ },
80
+ {
81
+ title: ' First name' ,
82
+ data: ' firstName' ,
101
83
},
102
- },
103
- ],
104
- };
84
+ {
85
+ title: ' Last name' ,
86
+ data: ' lastName'
87
+ },
88
+ {
89
+ title: ' Actions' ,
90
+ data: null ,
91
+ defaultContent: ' ' ,
92
+ ngTemplateRef: {
93
+ ref: this .demoNg ,
94
+ context: {
95
+ // needed for capturing events inside <ng-template>
96
+ captureEvents: self .onCaptureEvent .bind (self )
97
+ }
98
+ }
99
+ }
100
+ ]
101
+ };
102
+ });
103
+ }
105
104
106
- // wait before loading table
105
+ ngAfterViewInit() {
107
106
setTimeout (() => {
108
- this .dtTrigger .next ();
107
+ // race condition fails unit tests if dtOptions isn't sent with dtTrigger
108
+ this .dtTrigger .next (this .dtOptions );
109
109
}, 200 );
110
110
}
111
111
112
112
onCaptureEvent(event : IDemoNgComponentEventType ) {
113
- console .log (event );
113
+ this .message = ` Event '${event .cmd }' with data '${JSON .stringify (event .data )} ` ;
114
+ }
115
+
116
+ ngOnDestroy(): void {
117
+ // Do not forget to unsubscribe the event
118
+ this .dtTrigger .unsubscribe ();
114
119
}
115
120
}
116
121
```
0 commit comments