1
- import { AfterContentInit , ChangeDetectionStrategy , Component , ContentChild , Directive , DoCheck , ElementRef , EmbeddedViewRef , EventEmitter , Host , HostListener , Input , IterableDiffer , IterableDiffers , NgZone , OnDestroy , Output , TemplateRef , ViewChild , ViewContainerRef , ɵisListLikeIterable as isListLikeIterable , ɵmarkDirty } from '@angular/core' ;
1
+ import { AfterContentInit , ChangeDetectionStrategy , Component , ContentChild , Directive , DoCheck , ElementRef , EmbeddedViewRef , EventEmitter , forwardRef , Host , HostListener , Inject , InjectionToken , Input , IterableDiffer , IterableDiffers , NgZone , OnDestroy , Output , TemplateRef , ViewChild , ViewContainerRef , ɵisListLikeIterable as isListLikeIterable , ɵmarkDirty } from '@angular/core' ;
2
2
import { ItemEventData , KeyedTemplate , LayoutBase , ListView , ObservableArray , profile , View } from '@nativescript/core' ;
3
3
4
4
import { extractSingleViewRecursive } from '../../element-registry/registry' ;
@@ -7,6 +7,12 @@ import { NgViewTemplate } from '../../view-refs';
7
7
8
8
const NG_VIEW = '_ngViewRef' ;
9
9
10
+ export interface TemplatedItemsHost < T = any > {
11
+ registerTemplate ( key : string , template : TemplateRef < T > ) ;
12
+ }
13
+
14
+ export const TEMPLATED_ITEMS_COMPONENT = new InjectionToken < TemplatedItemsHost > ( 'TemplatedItemsComponent' ) ;
15
+
10
16
export class ItemContext < T > {
11
17
constructor ( public $implicit ?: T , public item ?: T , public index ?: number , public even ?: boolean , public odd ?: boolean ) { }
12
18
}
@@ -83,8 +89,9 @@ export interface SetupItemViewArgs<T> {
83
89
<ng-container #loader></ng-container>
84
90
</DetachedContainer>` ,
85
91
changeDetection : ChangeDetectionStrategy . OnPush ,
92
+ providers : [ { provide : TEMPLATED_ITEMS_COMPONENT , useExisting : forwardRef ( ( ) => ListViewComponent ) } ] ,
86
93
} )
87
- export class ListViewComponent < T = any > implements DoCheck , OnDestroy , AfterContentInit {
94
+ export class ListViewComponent < T = any > implements DoCheck , OnDestroy , AfterContentInit , TemplatedItemsHost {
88
95
public get nativeElement ( ) : ListView {
89
96
return this . templatedItemsView ;
90
97
}
@@ -180,7 +187,10 @@ export class ListViewComponent<T = any> implements DoCheck, OnDestroy, AfterCont
180
187
this . _templateMap = new Map < string , NsTemplatedItem < T > > ( ) ;
181
188
}
182
189
183
- this . _templateMap . set ( key , new NsTemplatedItem < T > ( template , this . loader , ( v ) => this . _viewToTemplate . set ( v , key ) ) ) ;
190
+ this . _templateMap . set (
191
+ key ,
192
+ new NsTemplatedItem < T > ( template , this . loader , ( v ) => this . _viewToTemplate . set ( v , key ) )
193
+ ) ;
184
194
}
185
195
186
196
@HostListener ( 'itemLoading' , [ '$event' ] )
@@ -263,7 +273,7 @@ export function getItemViewRoot(viewRef: EmbeddedViewRef<unknown>, rootLocator:
263
273
// eslint-disable-next-line @angular-eslint/directive-selector
264
274
@Directive ( { selector : '[nsTemplateKey],[nsTemplateKeys]' } )
265
275
export class TemplateKeyDirective < T > {
266
- constructor ( private templateRef : TemplateRef < T > , @Host ( ) private comp : ListViewComponent < T > ) { }
276
+ constructor ( private templateRef : TemplateRef < T > , @Host ( ) @ Inject ( TEMPLATED_ITEMS_COMPONENT ) private comp : TemplatedItemsHost < T > ) { }
267
277
268
278
@Input ( )
269
279
set nsTemplateKey ( value : string ) {
0 commit comments