@@ -22,8 +22,19 @@ import {ObservableArray} from 'data/observable-array';
2222import { LayoutBase } from 'ui/layouts/layout-base' ;
2323const NG_VIEW = "_ngViewRef" ;
2424
25+ export class ListItemContext {
26+ constructor (
27+ public $implicit ?: any ,
28+ public item ?: any ,
29+ public index ?: number ,
30+ public even ?: boolean ,
31+ public odd ?: boolean
32+ ) {
33+ }
34+ }
35+
2536export interface SetupItemViewArgs {
26- view : EmbeddedViewRef ;
37+ view : EmbeddedViewRef < any > ;
2738 data : any ;
2839 index : number ;
2940}
@@ -45,7 +56,7 @@ export class ListViewComponent {
4556
4657 @Output ( ) public setupItemView : EventEmitter < SetupItemViewArgs > = new EventEmitter < SetupItemViewArgs > ( ) ;
4758
48- @ContentChild ( TemplateRef ) itemTemplate : TemplateRef ;
59+ @ContentChild ( TemplateRef ) itemTemplate : TemplateRef < ListItemContext > ;
4960
5061 set items ( value : any ) {
5162 this . _items = value ;
@@ -77,28 +88,30 @@ export class ListViewComponent {
7788 let index = args . index ;
7889 let items = args . object . items ;
7990 let currentItem = typeof ( items . getItem ) === "function" ? items . getItem ( index ) : items [ index ] ;
80- let viewRef : EmbeddedViewRef ;
91+ let viewRef : EmbeddedViewRef < ListItemContext > ;
8192
8293 if ( args . view ) {
8394 console . log ( "ListView.onItemLoading: " + index + " - Reusing exisiting view" ) ;
8495 viewRef = args . view [ NG_VIEW ] ;
8596 }
8697 else {
8798 console . log ( "ListView.onItemLoading: " + index + " - Creating view from template" ) ;
88- viewRef = this . loader . createEmbeddedView ( this . itemTemplate , 0 ) ;
99+ viewRef = this . loader . createEmbeddedView ( this . itemTemplate , new ListItemContext ( ) , 0 ) ;
89100 args . view = getSingleViewFromViewRef ( viewRef ) ;
90101 args . view [ NG_VIEW ] = viewRef ;
91102 }
92103 this . setupViewRef ( viewRef , currentItem , index ) ;
93104 }
94105
95- public setupViewRef ( viewRef : EmbeddedViewRef , data : any , index : number ) : void {
96- viewRef . setLocal ( '\$implicit' , data ) ;
97- viewRef . setLocal ( "item" , data ) ;
98- viewRef . setLocal ( "index" , index ) ;
99- viewRef . setLocal ( 'even' , ( index % 2 == 0 ) ) ;
100- viewRef . setLocal ( 'odd' , ( index % 2 == 1 ) ) ;
101- this . setupItemView . next ( { 'view' : viewRef , 'data' : data , 'index' : index } ) ;
106+ public setupViewRef ( viewRef : EmbeddedViewRef < ListItemContext > , data : any , index : number ) : void {
107+ const context = viewRef . context ;
108+ context . $implicit = data ;
109+ context . item = data ;
110+ context . index = index ;
111+ context . even = ( index % 2 == 0 ) ;
112+ context . odd = ! context . even ;
113+
114+ this . setupItemView . next ( { view : viewRef , data : data , index : index , context : context } ) ;
102115 }
103116
104117 ngDoCheck ( ) {
@@ -118,7 +131,7 @@ export class ListViewComponent {
118131 }
119132}
120133
121- function getSingleViewFromViewRef ( viewRef : EmbeddedViewRef ) : View {
134+ function getSingleViewFromViewRef ( viewRef : EmbeddedViewRef < any > ) : View {
122135 var getSingleViewRecursive = ( nodes : Array < any > , nestLevel : number ) => {
123136 var actualNodes = nodes . filter ( ( n ) => ! ! n && n . nodeName !== "#text" ) ;
124137
0 commit comments