1
1
import { createRouter , createWebHistory } from '../../src'
2
2
import { createApp , ref , reactive , defineComponent } from 'vue'
3
3
4
+ // override existing style on dev with shorter times
5
+ if ( ! __CI__ ) {
6
+ const transitionDuration = '0.5s'
7
+ const styleEl = document . createElement ( 'style' )
8
+ styleEl . innerHTML = `
9
+ .fade-enter-active,
10
+ .fade-leave-active {
11
+ transition: opacity ${ transitionDuration } ease;
12
+ }
13
+ .child-view {
14
+ position: absolute;
15
+ transition: all ${ transitionDuration } cubic-bezier(0.55, 0, 0.1, 1);
16
+ }
17
+ `
18
+ document . head . append ( styleEl )
19
+ }
20
+
4
21
const Home = defineComponent ( {
5
22
template : `
6
23
<div>
@@ -20,6 +37,9 @@ const state = reactive({
20
37
const Foo = defineComponent ( {
21
38
template : '<div>foo {{ enterCallback }}</div>' ,
22
39
data : ( ) => ( { key : 'Foo' , enterCallback : 0 } ) ,
40
+ mounted ( ) {
41
+ console . log ( 'mounted Foo' )
42
+ } ,
23
43
beforeRouteEnter ( to , from , next ) {
24
44
state . enter ++
25
45
logs . value . push ( `enter ${ from . path } - ${ to . path } ` )
@@ -55,17 +75,22 @@ const router = createRouter({
55
75
} ,
56
76
] ,
57
77
} )
78
+
58
79
const app = createApp ( {
59
80
template : `
60
81
<div id="app">
61
82
<h1>Instances</h1>
62
- <button id="test-keep-alive" @click=" testCase = 'keepalive'">Use Keep Alive</button >
83
+ <p>Using {{ testCase || 'default' }}</p >
63
84
<button id="test-normal" @click="testCase = ''">Use Normal</button>
85
+ <button id="test-keepalive" @click="testCase = 'keepalive'">Use Keep Alive</button>
86
+ <button id="test-transition" @click="testCase = 'transition'">Use Transition</button>
87
+ <button id="test-keyed" @click="testCase = 'keyed'">Use keyed</button>
88
+ <button id="test-keepalivekeyed" @click="testCase = 'keepalivekeyed'">Use Keep Alive Keyed</button>
64
89
<pre>
65
- route: {{ $route.fullPath }}
66
- enters: {{ state.enter }}
67
- updates: {{ state.update }}
68
- leaves: {{ state.leave }}
90
+ route: {{ $route.fullPath }}
91
+ enters: {{ state.enter }}
92
+ updates: {{ state.update }}
93
+ leaves: {{ state.leave }}
69
94
</pre>
70
95
<pre id="logs">{{ logs.join('\\n') }}</pre>
71
96
<button id="resetLogs" @click="logs = []">Reset Logs</button>
@@ -74,7 +99,8 @@ const app = createApp({
74
99
<li><router-link to="/foo">/foo</router-link></li>
75
100
<li><router-link to="/f/1">/f/1</router-link></li>
76
101
<li><router-link to="/f/2">/f/2</router-link></li>
77
- <li><router-link to="/f/2?foo">/f/2?foo</router-link></li>
102
+ <li><router-link to="/f/2?bar=foo">/f/2?bar=foo</router-link></li>
103
+ <li><router-link to="/f/2?foo=key">/f/2?foo=key</router-link></li>
78
104
</ul>
79
105
80
106
<template v-if="testCase === 'keepalive'">
@@ -84,6 +110,23 @@ const app = createApp({
84
110
</keep-alive>
85
111
</router-view>
86
112
</template>
113
+ <template v-else-if="testCase === 'transition'">
114
+ <router-view v-slot="{ Component }" >
115
+ <transition name="fade" mode="">
116
+ <component :is="Component" class="view" />
117
+ </transition>
118
+ </router-view>
119
+ </template>
120
+ <template v-else-if="testCase === 'keyed'">
121
+ <router-view :key="$route.query.foo" class="view" />
122
+ </template>
123
+ <template v-else-if="testCase === 'keepalivekeyed'">
124
+ <router-view v-slot="{ Component }" >
125
+ <keep-alive>
126
+ <component :is="Component" :key="$route.query.foo" class="view" />
127
+ </keep-alive>
128
+ </router-view>
129
+ </template>
87
130
<template v-else>
88
131
<router-view class="view" />
89
132
</template>
@@ -96,6 +139,7 @@ const app = createApp({
96
139
return { state, logs, testCase }
97
140
} ,
98
141
} )
142
+
99
143
app . use ( router )
100
144
101
145
app . mount ( '#app' )
0 commit comments