@@ -51,24 +51,30 @@ export class ViewUtil {
51
51
}
52
52
53
53
public insertChild (
54
- parent : NgView ,
55
- child : NgView ,
56
- previous : NgView = parent . lastChild ,
54
+ parent : View ,
55
+ child : View ,
56
+ previous ? : NgView ,
57
57
next ?: NgView
58
58
) {
59
59
if ( ! parent ) {
60
60
return ;
61
61
}
62
62
63
- this . addToQueue ( parent , child , previous , next ) ;
63
+ const extendedParent = this . ensureNgViewExtensions ( parent ) ;
64
+ const extendedChild = this . ensureNgViewExtensions ( child ) ;
65
+
66
+ if ( ! previous ) {
67
+ previous = extendedParent . lastChild ;
68
+ }
69
+ this . addToQueue ( extendedParent , extendedChild , previous , next ) ;
64
70
65
71
if ( isInvisibleNode ( child ) ) {
66
- child . templateParent = parent ;
72
+ extendedChild . templateParent = extendedParent ;
67
73
}
68
74
69
75
if ( ! isDetachedElement ( child ) ) {
70
76
const nextVisual = this . findNextVisual ( next ) ;
71
- this . addToVisualTree ( parent , child , nextVisual ) ;
77
+ this . addToVisualTree ( extendedParent , extendedChild , nextVisual ) ;
72
78
}
73
79
}
74
80
@@ -145,15 +151,18 @@ export class ViewUtil {
145
151
return next ;
146
152
}
147
153
148
- public removeChild ( parent : NgView , child : NgView ) {
154
+ public removeChild ( parent : View , child : View ) {
149
155
traceLog ( `ViewUtil.removeChild parent: ${ parent } child: ${ child } ` ) ;
150
156
151
157
if ( ! parent ) {
152
158
return ;
153
159
}
154
160
155
- this . removeFromQueue ( parent , child ) ;
156
- this . removeFromVisualTree ( parent , child ) ;
161
+ const extendedParent = this . ensureNgViewExtensions ( parent ) ;
162
+ const extendedChild = this . ensureNgViewExtensions ( child ) ;
163
+
164
+ this . removeFromQueue ( extendedParent , extendedChild ) ;
165
+ this . removeFromVisualTree ( extendedParent , extendedChild ) ;
157
166
}
158
167
159
168
private removeFromQueue ( parent : NgView , child : NgView ) {
@@ -257,16 +266,34 @@ export class ViewUtil {
257
266
}
258
267
259
268
const viewClass = getViewClass ( name ) ;
260
- let view = < NgView > new viewClass ( ) ;
261
- view . nodeName = name ;
262
- view . meta = getViewMeta ( name ) ;
269
+ const view = < NgView > new viewClass ( ) ;
270
+ const ngView = this . setNgViewExtensions ( view , name ) ;
271
+
272
+ return ngView ;
273
+ }
274
+
275
+ private ensureNgViewExtensions ( view : View ) : NgView {
276
+ if ( view . hasOwnProperty ( "meta" ) ) {
277
+ return view as NgView ;
278
+ } else {
279
+ const name = view . typeName ;
280
+ const ngView = this . setNgViewExtensions ( view , name ) ;
281
+
282
+ return ngView ;
283
+ }
284
+ }
285
+
286
+ private setNgViewExtensions ( view : View , name : string ) : NgView {
287
+ const ngView = view as NgView ;
288
+ ngView . nodeName = name ;
289
+ ngView . meta = getViewMeta ( name ) ;
263
290
264
291
// we're setting the node type of the view
265
292
// to 'element' because of checks done in the
266
293
// dom animation engine
267
- view . nodeType = ELEMENT_NODE_TYPE ;
294
+ ngView . nodeType = ELEMENT_NODE_TYPE ;
268
295
269
- return view ;
296
+ return ngView ;
270
297
}
271
298
272
299
public setProperty ( view : NgView , attributeName : string , value : any , namespace ?: string ) : void {
@@ -382,4 +409,3 @@ export class ViewUtil {
382
409
view . style [ styleName ] = unsetValue ;
383
410
}
384
411
}
385
-
0 commit comments