@@ -1407,6 +1407,7 @@ function initLifecycle(vm) {
1407
1407
vm . $refs = { } ;
1408
1408
1409
1409
vm . _watcher = null ;
1410
+ vm . _inactive = false ;
1410
1411
vm . _isMounted = false ;
1411
1412
vm . _isDestroyed = false ;
1412
1413
vm . _isBeingDestroyed = false ;
@@ -1681,6 +1682,7 @@ function insert(vnode) {
1681
1682
callHook ( vnode . child , 'mounted' ) ;
1682
1683
}
1683
1684
if ( vnode . data . keepAlive ) {
1685
+ vnode . child . _inactive = false ;
1684
1686
callHook ( vnode . child , 'activated' ) ;
1685
1687
}
1686
1688
}
@@ -1690,6 +1692,7 @@ function destroy(vnode) {
1690
1692
if ( ! vnode . data . keepAlive ) {
1691
1693
vnode . child . $destroy ( ) ;
1692
1694
} else {
1695
+ vnode . child . _inactive = true ;
1693
1696
callHook ( vnode . child , 'deactivated' ) ;
1694
1697
}
1695
1698
}
@@ -2800,7 +2803,7 @@ Object.defineProperty(Vue.prototype, '$isServer', {
2800
2803
}
2801
2804
} ) ;
2802
2805
2803
- Vue . version = '2.0.0-alpha.7 ' ;
2806
+ Vue . version = '2.0.0-alpha.8 ' ;
2804
2807
2805
2808
// attributes that should be using props for binding
2806
2809
var mustUseProp = makeMap ( 'value,selected,checked,muted' ) ;
@@ -3023,7 +3026,8 @@ var nodeOps = Object.freeze({
3023
3026
setAttribute : setAttribute
3024
3027
} ) ;
3025
3028
3026
- var emptyNode = new VNode ( '' , { } , [ ] ) ;
3029
+ var emptyData = { } ;
3030
+ var emptyNode = new VNode ( '' , emptyData , [ ] ) ;
3027
3031
var hooks$1 = [ 'create' , 'update' , 'postpatch' , 'remove' , 'destroy' ] ;
3028
3032
3029
3033
function isUndef ( s ) {
@@ -3161,7 +3165,7 @@ function createPatchFunction(backend) {
3161
3165
cbs . destroy [ i ] ( vnode ) ;
3162
3166
}
3163
3167
}
3164
- if ( isDef ( i = vnode . child ) ) {
3168
+ if ( isDef ( i = vnode . child ) && ! data . keepAlive ) {
3165
3169
invokeDestroyHook ( i . _vnode ) ;
3166
3170
}
3167
3171
if ( isDef ( i = vnode . children ) ) {
@@ -3291,13 +3295,18 @@ function createPatchFunction(backend) {
3291
3295
if ( oldVnode === vnode ) return ;
3292
3296
var i = void 0 ,
3293
3297
hook = void 0 ;
3294
- if ( isDef ( i = vnode . data ) && isDef ( hook = i . hook ) && isDef ( i = hook . prepatch ) ) {
3295
- i ( oldVnode , vnode ) ;
3298
+ var hasData = isDef ( i = vnode . data ) ;
3299
+ if ( hasData ) {
3300
+ // ensure the oldVnode also has data during patch
3301
+ oldVnode . data = oldVnode . data || emptyData ;
3302
+ if ( isDef ( hook = i . hook ) && isDef ( i = hook . prepatch ) ) {
3303
+ i ( oldVnode , vnode ) ;
3304
+ }
3296
3305
}
3297
3306
var elm = vnode . elm = oldVnode . elm ;
3298
3307
var oldCh = oldVnode . children ;
3299
3308
var ch = vnode . children ;
3300
- if ( isDef ( vnode . data ) ) {
3309
+ if ( hasData ) {
3301
3310
for ( i = 0 ; i < cbs . update . length ; ++ i ) {
3302
3311
cbs . update [ i ] ( oldVnode , vnode ) ;
3303
3312
} if ( isDef ( hook ) && isDef ( i = hook . update ) ) i ( oldVnode , vnode ) ;
@@ -3316,7 +3325,7 @@ function createPatchFunction(backend) {
3316
3325
} else if ( oldVnode . text !== vnode . text ) {
3317
3326
nodeOps . setTextContent ( elm , vnode . text ) ;
3318
3327
}
3319
- if ( isDef ( vnode . data ) ) {
3328
+ if ( hasData ) {
3320
3329
for ( i = 0 ; i < cbs . postpatch . length ; ++ i ) {
3321
3330
cbs . postpatch [ i ] ( oldVnode , vnode ) ;
3322
3331
} if ( isDef ( hook ) && isDef ( i = hook . postpatch ) ) i ( oldVnode , vnode ) ;
0 commit comments