@@ -1407,6 +1407,7 @@ function initLifecycle(vm) {
14071407 vm . $refs = { } ;
14081408
14091409 vm . _watcher = null ;
1410+ vm . _inactive = false ;
14101411 vm . _isMounted = false ;
14111412 vm . _isDestroyed = false ;
14121413 vm . _isBeingDestroyed = false ;
@@ -1681,6 +1682,7 @@ function insert(vnode) {
16811682 callHook ( vnode . child , 'mounted' ) ;
16821683 }
16831684 if ( vnode . data . keepAlive ) {
1685+ vnode . child . _inactive = false ;
16841686 callHook ( vnode . child , 'activated' ) ;
16851687 }
16861688}
@@ -1690,6 +1692,7 @@ function destroy(vnode) {
16901692 if ( ! vnode . data . keepAlive ) {
16911693 vnode . child . $destroy ( ) ;
16921694 } else {
1695+ vnode . child . _inactive = true ;
16931696 callHook ( vnode . child , 'deactivated' ) ;
16941697 }
16951698 }
@@ -2800,7 +2803,7 @@ Object.defineProperty(Vue.prototype, '$isServer', {
28002803 }
28012804} ) ;
28022805
2803- Vue . version = '2.0.0-alpha.7 ' ;
2806+ Vue . version = '2.0.0-alpha.8 ' ;
28042807
28052808// attributes that should be using props for binding
28062809var mustUseProp = makeMap ( 'value,selected,checked,muted' ) ;
@@ -3023,7 +3026,8 @@ var nodeOps = Object.freeze({
30233026 setAttribute : setAttribute
30243027} ) ;
30253028
3026- var emptyNode = new VNode ( '' , { } , [ ] ) ;
3029+ var emptyData = { } ;
3030+ var emptyNode = new VNode ( '' , emptyData , [ ] ) ;
30273031var hooks$1 = [ 'create' , 'update' , 'postpatch' , 'remove' , 'destroy' ] ;
30283032
30293033function isUndef ( s ) {
@@ -3161,7 +3165,7 @@ function createPatchFunction(backend) {
31613165 cbs . destroy [ i ] ( vnode ) ;
31623166 }
31633167 }
3164- if ( isDef ( i = vnode . child ) ) {
3168+ if ( isDef ( i = vnode . child ) && ! data . keepAlive ) {
31653169 invokeDestroyHook ( i . _vnode ) ;
31663170 }
31673171 if ( isDef ( i = vnode . children ) ) {
@@ -3291,13 +3295,18 @@ function createPatchFunction(backend) {
32913295 if ( oldVnode === vnode ) return ;
32923296 var i = void 0 ,
32933297 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+ }
32963305 }
32973306 var elm = vnode . elm = oldVnode . elm ;
32983307 var oldCh = oldVnode . children ;
32993308 var ch = vnode . children ;
3300- if ( isDef ( vnode . data ) ) {
3309+ if ( hasData ) {
33013310 for ( i = 0 ; i < cbs . update . length ; ++ i ) {
33023311 cbs . update [ i ] ( oldVnode , vnode ) ;
33033312 } if ( isDef ( hook ) && isDef ( i = hook . update ) ) i ( oldVnode , vnode ) ;
@@ -3316,7 +3325,7 @@ function createPatchFunction(backend) {
33163325 } else if ( oldVnode . text !== vnode . text ) {
33173326 nodeOps . setTextContent ( elm , vnode . text ) ;
33183327 }
3319- if ( isDef ( vnode . data ) ) {
3328+ if ( hasData ) {
33203329 for ( i = 0 ; i < cbs . postpatch . length ; ++ i ) {
33213330 cbs . postpatch [ i ] ( oldVnode , vnode ) ;
33223331 } if ( isDef ( hook ) && isDef ( i = hook . postpatch ) ) i ( oldVnode , vnode ) ;
0 commit comments