【问题标题】:Vuejs: shared components used on multiple pages disappearedVuejs:在多个页面上使用的共享组件消失了
【发布时间】:2019-07-10 23:06:50
【问题描述】:

现在,我正在使用 vue-router 在 vue.js 中编写一个单页应用程序。主页、登录页面等页面都共享一个导航和页脚组件。然而,在几页上,我需要整个屏幕,以便不显示导航和页脚。

因此,我决定嵌套组件并在必要时包含导航和页脚组件。我现在的问题是,导航和页脚模板在所有页面上消失了。

编辑:更完整的演示可以在this Github repository找到。

这是我正在使用的文件的简化版本:

index.html:

<div id="app">
  <router-view></routerview> 
</div>

router.js:

import Homepage from './homepage.vue';
import SignIn from './signin.vue';

const router = new VueRouter({
  routes: [
    {path: '/', component: Homepage},
    {path: '/signin', component: SignIn},
    ]
})

homepage.vue 和 signin.vue 组件:

<template>
  <navigation></navigation>  
    // some page-specific content
  <footer-vue></footer-vue>
</template>

<script>
import Navigation from './navigation.vue';
import Footer from './footer.vue';

export default {
  components: {
      'navigation': Navigation,
      'footer-vue': Footer,
  },
}
</script>

没有导航和页脚的组件:

<template> 
// some page-specific content
</template>

甚至可以以这种方式嵌套组件吗?我希望有人能够指出我正确的方向。

【问题讨论】:

  • 任何控制台错误?看起来您的模板中有多个根节点,这是不允许的。
  • npm run build 没有显示任何错误(我使用的是 webpack-simple)模板,浏览器中的开发者控制台也没有。
  • 您能否确认您的真实模板中是否有多个根节点?或者这只是为这个问题准备示例的错误?
  • 我为更完整的示例创建了一个 Github 存储库。随意看看。您可以在原帖中找到链接。

标签: javascript vue.js vue-component vue-router


【解决方案1】:

homepage.vuesignin.vue 都有无效的模板。例如

<template>
    <navigation></navigation>
    <h1>The homepage</h1>
    <footer-vue></footer-vue>
</template>

这是不允许的,因为它有 3 个根节点。见https://vuejs.org/v2/guide/components.html#A-Single-Root-Element

你需要包装它才能让它工作:

<template>
    <div>
        <navigation></navigation>
        <h1>The homepage</h1>
        <footer-vue></footer-vue>
    </div>
</template>

请注意,此限制不适用于功能组件,并且有望在 Vue 3 中的所有组件中取消。

更令人担忧的是,您没有看到任何错误消息。您确实需要对此进行调查,因为这表明您的开发设置存在很大问题。

您应该看到的错误消息示例:

new Vue({
  el: '#app',
  template: '<div></div><div></div>'
})
<script src="https://unpkg.com/vue@2.6.10/dist/vue.js"></script>
<div id="app">
</div>

【讨论】:

  • 感谢您的快速回答。将主页和登录页面的模板包装在一个 div 中解决了这个问题。我几个小时前才开始学习 Vue.js。我没想到会被这样一个小细节卡住。无论如何,再次感谢@skirtle!关于错误消息:我会看看。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-08-14
  • 2022-10-15
  • 1970-01-01
  • 1970-01-01
  • 2018-07-26
  • 1970-01-01
  • 2019-02-01
相关资源
最近更新 更多