@@ -23,27 +23,6 @@ export default class RouteTransition {
2323 this . next = null
2424 this . aborted = false
2525 this . done = false
26-
27- // start by determine the queues
28-
29- // the deactivate queue is an array of router-view
30- // directive instances that need to be deactivated,
31- // deepest first.
32- let view = router . _rootView
33- this . deactivateQueue = router . _views = [ ]
34- while ( view ) {
35- this . deactivateQueue . unshift ( view )
36- view = view . childView
37- }
38-
39- // check the default handler of the deepest match
40- let matched = to . matched
41- ? Array . prototype . slice . call ( to . matched )
42- : [ ]
43-
44- // the activate queue is an array of route handlers
45- // that need to be activated
46- this . activateQueue = matched . map ( match => match . handler )
4726 }
4827
4928 /**
@@ -114,28 +93,37 @@ export default class RouteTransition {
11493
11594 start ( cb ) {
11695 let transition = this
117- let daq = this . deactivateQueue
118- let aq = this . activateQueue
119- let rdaq = daq . slice ( ) . reverse ( )
120- let reuseQueue
96+
97+ // determine the queue of views to deactivate
98+ let deactivateQueue = [ ]
99+ let view = this . router . _rootView
100+ while ( view ) {
101+ deactivateQueue . unshift ( view )
102+ view = view . childView
103+ }
104+ let reverseDeactivateQueue = deactivateQueue . slice ( ) . reverse ( )
105+
106+ // determine the queue of route handlers to activate
107+ let activateQueue = this . activateQueue =
108+ toArray ( this . to . matched ) . map ( match => match . handler )
121109
122110 // 1. Reusability phase
123- let i
124- for ( i = 0 ; i < rdaq . length ; i ++ ) {
125- if ( ! canReuse ( rdaq [ i ] , aq [ i ] , transition ) ) {
111+ let i , reuseQueue
112+ for ( i = 0 ; i < reverseDeactivateQueue . length ; i ++ ) {
113+ if ( ! canReuse ( reverseDeactivateQueue [ i ] , activateQueue [ i ] , transition ) ) {
126114 break
127115 }
128116 }
129117 if ( i > 0 ) {
130- reuseQueue = rdaq . slice ( 0 , i )
131- daq = rdaq . slice ( i ) . reverse ( )
132- aq = aq . slice ( i )
118+ reuseQueue = reverseDeactivateQueue . slice ( 0 , i )
119+ deactivateQueue = reverseDeactivateQueue . slice ( i ) . reverse ( )
120+ activateQueue = activateQueue . slice ( i )
133121 }
134122
135123 // 2. Validation phase
136- transition . runQueue ( daq , canDeactivate , ( ) => {
137- transition . runQueue ( aq , canActivate , ( ) => {
138- transition . runQueue ( daq , deactivate , ( ) => {
124+ transition . runQueue ( deactivateQueue , canDeactivate , ( ) => {
125+ transition . runQueue ( activateQueue , canActivate , ( ) => {
126+ transition . runQueue ( deactivateQueue , deactivate , ( ) => {
139127 // 3. Activation phase
140128
141129 // Update router current route
@@ -146,8 +134,8 @@ export default class RouteTransition {
146134
147135 // the root of the chain that needs to be replaced
148136 // is the top-most non-reusable view.
149- if ( daq . length ) {
150- let view = daq [ daq . length - 1 ]
137+ if ( deactivateQueue . length ) {
138+ let view = deactivateQueue [ deactivateQueue . length - 1 ]
151139 let depth = reuseQueue ? reuseQueue . length : 0
152140 activate ( view , transition , depth , cb )
153141 } else {
@@ -312,3 +300,9 @@ export default class RouteTransition {
312300function isPlainOjbect ( val ) {
313301 return Object . prototype . toString . call ( val ) === '[object Object]'
314302}
303+
304+ function toArray ( val ) {
305+ return val
306+ ? Array . prototype . slice . call ( val )
307+ : [ ]
308+ }
0 commit comments