const Foo = {
name: 'foo',
data () {
return {
inputText: '',
}
},
template: `
<div class="box">
<h1>{{ $route.path }}</h1>
<input type="text" v-model="inputText">
</div>
`,
}
const Baz = {
name: 'baz',
data () {
return {
inputText: '',
}
},
template: `
<div class="box">
<h1>{{ $route.path }}</h1>
<input type="text" v-model="inputText">
</div>
`,
}
const routes = [
{ path: '/foo', component: Foo, meta: { reuse: false }, },
{ path: '/bar', component: Foo, meta: { reuse: false }, },
{ path: '/baz', component: Baz },
{ path: '/bop', component: Baz }
]
const router = new VueRouter({
routes
})
const app = new Vue({
router,
data: {
key: null,
},
}).$mount('#app')
router.beforeEach((to, from, next) => {
if (to.matched.some(record => record.meta.reuse === false)) {
app.key = to.path
} else {
app.key = null
}
next()
})
#content {
position: relative;
height: 200px;
}
.box {
position: absolute;
top: 0;
left: 0;
width: 200px;
height: 200px;
background: rgba(0,0,0, 0.2);
text-align: center;
transform: translate3d(0, 0, 0);
}
<script src="https://unpkg.com/vue/dist/vue.js"></script>
<script src="https://unpkg.com/[email protected]"></script>
<div id="app">
<h1>Hello App!</h1>
<p>
<router-link to="/foo">Go to Foo</router-link>
<router-link to="/bar">Go to Bar</router-link>
<router-link to="/baz">Go to Baz</router-link>
<router-link to="/bop">Go to Bop</router-link>
</p>
<div id="content">
<router-view :key="key"></router-view>
</div>
<pre>{{ key }}</pre>
</div>