我正在学习来自React的Vue,并且想知道保持导航栏的正确方式是什么-我在导航栏上有路由器链接。
我有一个带有路由器链接的导航栏组件,它可以工作,但它在前往另一个路由时正在重新加载。有没有一种方法可以在主体组件之外持久化它?例如,在前往新路线时不会重新呈现?
我试着把它放在路由器视图之外,但它在任何地方都不能渲染:
<template>
<div id="app">
<topnavbar>
</topnavbar>
<router-view>
</router-view>
</div>
</template>如果它进了里面也一样。
如何持久化导航栏?它是否应该是路由器中所有组件的父组件,或者最佳实践是什么?
发布于 2017-11-22 19:59:11
你的导航栏应该在router-view之外渲染,这里是如何设置它的(你可能已经做了很多)。
首先,从一个基础应用开始,它为你的所有路线提供服务:
App.vue (基础应用)
<template>
<topnavbar />
<router-view />
</template>
<script type="text/javascript">
import topnavbar from './topnavbar.vue'
export default{
components:{
topnavbar // register component
}
}
</script>现在,您需要做的就是设置路由器并将基础应用程序挂载到主Vue实例:
app.js
import Vue from 'vue'
import VueRouter from 'vue-router'
import App from ''./components/App.vue // import the base component
Vue.use(VueRouter);
// import views you want to serve up in `router-view`
import Foo from './components/views/Foo.vue'
import Bar from './components/views/Bar.vue'
const routes = [{
path: '/foo',
component: Foo
},
{
path: '/bar',
component: Bar
},
]
const router = new VueRouter({
mode: 'history',
routes
})
new Vue({
render: h => h(App), // mount the base component
router
}).$mount('#app')这应该可以把所有东西都准备好了。现在,为了确保导航栏不会刷新,请确保使用router-link而不是锚定标记:
Topnavbar.vue
<div id="topnav">
<ul>
<li><router-link to="foo">Foo</router-link></li>
<li><router-link to="bar">Bar</router-link></li>
<ul>
</div>这应该会在你的应用程序中提供组件,而不会在你每次导航到不同的页面时重新呈现topnavbar。
这是JSFiddle:https://jsfiddle.net/ukoebmwo/
https://stackoverflow.com/questions/47431867
复制相似问题