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/ vue-router@2.0.3 "></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>