vue.js - vue-router 如何保留导航栏?

标签 vue.js vuejs2 vue-router

我正在学习来自 React 的 Vue,想知道保留导航栏的正确方法是什么 - 我在那里有带路由器链接的导航。

我有一个带有路由器链接的导航栏组件,它可以工作,但在前往另一条路线时会重新加载。有没有办法将它保留在 body 成分的“外部”?比如在前往新路线时不重新渲染?

我尝试将它放在路由器 View 之外,但它不会在任何地方呈现:

<template>
  <div id="app">
    <topnavbar>
    </topnavbar>
    <router-view>
    </router-view>
  </div>
</template>

如果它进入内部,则相同。

如何保留导航栏?它应该是进入路由器的所有组件的父级,还是最佳实践?

最佳答案

您的导航栏应该呈现在 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 而不是 anchor 标记:

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/

关于vue.js - vue-router 如何保留导航栏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47431867/

相关文章:

vue.js - Vuelidate 检查真/假

jquery - VueRouter + VueJs2 + MetisMenu = 折叠错误

vue.js - VueJs Router 不渲染组件

laravel - 用空字符串替换 NULL 值 Vue

typescript - 如何在Vue和TypeScript应用程序中全局正确注册axios

security - 在 vuex state + persistedState 插件中存储 token 是否安全?

javascript - 返回到之前工作的组件会出现白页

javascript - 如何让 router-view 在另一个组件内渲染组件?

javascript - 我该如何解决 dev webpack style hot loader js 错误

javascript - 从本地主机调用 api 的生产环境