Skip to content

Commit 0c2b1aa

Browse files
zrh122posva
andcommitted
fix(view): fix deeply nested keep-alive router-views displaying (#2930)
* fix(router-view): fix deeply nested keep-alive router-views displaying Fix #2923 * chore: upgrade chromedriver * refactor(view): add keepAlive check Co-authored-by: Eduardo San Martin Morote <posva@users.noreply.github.com>
1 parent d4894b2 commit 0c2b1aa

File tree

5 files changed

+45
-14
lines changed

5 files changed

+45
-14
lines changed

examples/keepalive-view/app.js

+24
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@ const IndexChild2 = { template: '<div>index child2</div>' }
2727

2828
const Home = { template: '<div>home</div>' }
2929

30+
const ViewWithKeepalive = { template: '<keep-alive><router-view></router-view></keep-alive>' }
31+
3032
const router = new VueRouter({
3133
mode: 'history',
3234
base: __dirname,
@@ -58,6 +60,26 @@ const router = new VueRouter({
5860
path: '/with-guard2',
5961
name: 'with-guard2',
6062
component: WithGuard
63+
},
64+
{
65+
path: '/one',
66+
component: ViewWithKeepalive,
67+
children: [
68+
{
69+
path: 'two',
70+
component: ViewWithKeepalive,
71+
children: [
72+
{
73+
path: 'child1',
74+
component: IndexChild1
75+
},
76+
{
77+
path: 'child2',
78+
component: IndexChild2
79+
}
80+
]
81+
}
82+
]
6183
}
6284
]
6385
})
@@ -72,6 +94,8 @@ new Vue({
7294
<li><router-link to="/home">/home</router-link></li>
7395
<li><router-link to="/with-guard1">/with-guard1</router-link></li>
7496
<li><router-link to="/with-guard2">/with-guard2</router-link></li>
97+
<li><router-link to="/one/two/child1">/one/two/child1</router-link></li>
98+
<li><router-link to="/one/two/child2">/one/two/child2</router-link></li>
7599
</ul>
76100
<keep-alive>
77101
<router-view class="view"></router-view>

package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@
6262
"babel-preset-flow-vue": "^1.0.0",
6363
"browserstack-local": "^1.4.0",
6464
"buble": "^0.19.8",
65-
"chromedriver": "^76.0.0",
65+
"chromedriver": "^79.0.0",
6666
"conventional-changelog-cli": "^2.0.11",
6767
"cross-spawn": "^6.0.5",
6868
"css-loader": "^2.1.1",

src/components/view.js

+6-8
Original file line numberDiff line numberDiff line change
@@ -26,14 +26,12 @@ export default {
2626
let depth = 0
2727
let inactive = false
2828
while (parent && parent._routerRoot !== parent) {
29-
const vnodeData = parent.$vnode && parent.$vnode.data
30-
if (vnodeData) {
31-
if (vnodeData.routerView) {
32-
depth++
33-
}
34-
if (vnodeData.keepAlive && parent._inactive) {
35-
inactive = true
36-
}
29+
const vnodeData = parent.$vnode ? parent.$vnode.data : {}
30+
if (vnodeData.routerView) {
31+
depth++
32+
}
33+
if (vnodeData.keepAlive && parent._directInactive && parent._inactive) {
34+
inactive = true
3735
}
3836
parent = parent.$parent
3937
}

test/e2e/specs/keepalive-view.js

+10-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ module.exports = {
99
browser
1010
.url('http://localhost:8080/keepalive-view/')
1111
.waitForElementVisible('#app', 1000)
12-
.assert.count('li a', 5)
12+
.assert.count('li a', 7)
1313

1414
.click('li:nth-child(1) a')
1515
.assert.containsText('.view', 'index child1')
@@ -35,6 +35,15 @@ module.exports = {
3535
.click('li:nth-child(4) a')
3636
.assert.containsText('.view', 'with-guard1: 3')
3737

38+
// keep-alive deeply nested router-views
39+
// https://github.com/vuejs/vue-router/issues/2923
40+
.click('li:nth-child(6) a')
41+
.assert.containsText('.view', 'index child1')
42+
.click('li:nth-child(3) a')
43+
.assert.containsText('.view', 'home')
44+
.click('li:nth-child(7) a')
45+
.assert.containsText('.view', 'index child2')
46+
3847
.end()
3948
}
4049
}

yarn.lock

+4-4
Original file line numberDiff line numberDiff line change
@@ -2701,10 +2701,10 @@ chrome-trace-event@^1.0.2:
27012701
dependencies:
27022702
tslib "^1.9.0"
27032703

2704-
chromedriver@^76.0.0:
2705-
version "76.0.0"
2706-
resolved "https://registry.yarnpkg.com/chromedriver/-/chromedriver-76.0.0.tgz#cbf618c5b370799ff6e15b23de07e80f67f89025"
2707-
integrity sha512-jGyqs0N+lMo9iaNQxGKNPiLJWb2L9s2rwbRr1jJeQ37n6JQ1+5YMGviv/Fx5Z08vBWYbAvrKEzFsuYf8ppl+lw==
2704+
chromedriver@^79.0.0:
2705+
version "79.0.0"
2706+
resolved "https://registry.yarnpkg.com/chromedriver/-/chromedriver-79.0.0.tgz#1660ac29924dfcd847911025593d6b6746aeea35"
2707+
integrity sha512-DO29C7ntJfzu6q1vuoWwCON8E9x5xzopt7Q41A7Dr7hBKcdNpGw1l9DTt9b+l1qviOWiJLGsD+jHw21ptEHubA==
27082708
dependencies:
27092709
del "^4.1.1"
27102710
extract-zip "^1.6.7"

0 commit comments

Comments
 (0)