@@ -22,8 +22,19 @@ import {ObservableArray} from 'data/observable-array';
22
22
import { LayoutBase } from 'ui/layouts/layout-base' ;
23
23
const NG_VIEW = "_ngViewRef" ;
24
24
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
+
25
36
export interface SetupItemViewArgs {
26
- view : EmbeddedViewRef ;
37
+ view : EmbeddedViewRef < any > ;
27
38
data : any ;
28
39
index : number ;
29
40
}
@@ -45,7 +56,7 @@ export class ListViewComponent {
45
56
46
57
@Output ( ) public setupItemView : EventEmitter < SetupItemViewArgs > = new EventEmitter < SetupItemViewArgs > ( ) ;
47
58
48
- @ContentChild ( TemplateRef ) itemTemplate : TemplateRef ;
59
+ @ContentChild ( TemplateRef ) itemTemplate : TemplateRef < ListItemContext > ;
49
60
50
61
set items ( value : any ) {
51
62
this . _items = value ;
@@ -77,28 +88,30 @@ export class ListViewComponent {
77
88
let index = args . index ;
78
89
let items = args . object . items ;
79
90
let currentItem = typeof ( items . getItem ) === "function" ? items . getItem ( index ) : items [ index ] ;
80
- let viewRef : EmbeddedViewRef ;
91
+ let viewRef : EmbeddedViewRef < ListItemContext > ;
81
92
82
93
if ( args . view ) {
83
94
console . log ( "ListView.onItemLoading: " + index + " - Reusing exisiting view" ) ;
84
95
viewRef = args . view [ NG_VIEW ] ;
85
96
}
86
97
else {
87
98
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 ) ;
89
100
args . view = getSingleViewFromViewRef ( viewRef ) ;
90
101
args . view [ NG_VIEW ] = viewRef ;
91
102
}
92
103
this . setupViewRef ( viewRef , currentItem , index ) ;
93
104
}
94
105
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 } ) ;
102
115
}
103
116
104
117
ngDoCheck ( ) {
@@ -118,7 +131,7 @@ export class ListViewComponent {
118
131
}
119
132
}
120
133
121
- function getSingleViewFromViewRef ( viewRef : EmbeddedViewRef ) : View {
134
+ function getSingleViewFromViewRef ( viewRef : EmbeddedViewRef < any > ) : View {
122
135
var getSingleViewRecursive = ( nodes : Array < any > , nestLevel : number ) => {
123
136
var actualNodes = nodes . filter ( ( n ) => ! ! n && n . nodeName !== "#text" ) ;
124
137
0 commit comments