如何从另一个组件调用 VueJS 组件

Posted

技术标签:

【中文标题】如何从另一个组件调用 VueJS 组件【英文标题】:How to call VueJS component from another component 【发布时间】:2019-06-12 20:00:30 【问题描述】:

我是 VueJS 的新手,我在“组件”中组织了不同的页面。现在,不同的页面有不同的布局,例如,有些页面不会包含页眉和页脚(它们也是单独的组件)。

这是应该包含标题的组件的代码

<template>
    <Header />
    <div class="container main-content">
        <div class="row">
            <div class="col-lg-2"></div>
            <div class="col-lg-8">
                <h3 style="font-weight: bold;color: #000;">What will you like to do?</h3>
                <div class="col-lg-4 col-md-4 col-sm-4 col-xs-6 dash-menu-item">
                    <div class="item-body">
                        <router-link to="/dashboards" class="">
                            <i class="fa fa-user fa-4x"></i>
                            <p>View Dashboards</p>
                        </router-link>
                    </div>
                </div>
                <div class="col-lg-4 col-md-4 col-sm-4 col-xs-6 dash-menu-item">
                    <div class="item-body">
                        <router-link to="/home" class="">
                            <i class="fa fa-cogs fa-4x"></i>
                            <p>Manage Settings</p>
                        </router-link>
                    </div>
                </div>
            </div>
            <div class="col-lg-2"></div>
        </div>
    </div>
</template>
<script>
    import Header from './Header.vue'

    export default
        name: 'Loyalty',
        components:
            'Header': Header
        
    
</script>

这是我的 Header.vue

<template>
    <div>
        <div class="head">
          <div class="row">
            <div class="col-lg-6 col-md-6 col-sm-6 col-xs-6">
              <span class="pull-left" style="padding-left: 10px;">
                <router-link to="/home" class="header-text page-link"><span class="fa fa-arrow-left"></span>&nbsp;&nbsp;Home</router-link>
              </span>
            </div>
            <div class="col-lg-6 col-md-6 col-sm-6 col-xs-6 custom-hidden-sm">
              <span class="pull-right" style="padding-right: 10px;">
                <span class="header-text">Waje Loyalty</span>
              </span>
            </div>
          </div>
        </div>
    </div>
</template>
<script>
    export default
        name: 'Header',
        data()
            return
              page_name: this.$router.currentRoute.name
            
        
    
</script>

当我编译时,我得到了错误:

- Component template should contain exactly one root element. If you are using v-if on multiple elements, use v-else-if to chain them instead.

我该如何解决这个问题?

【问题讨论】:

【参考方案1】:

问题是由Loyalty.vue 模板中的两个根元素引起的:&lt;Header /&gt;&lt;div class="container main-content"&gt;

VueJS 组件模板可以包含一个且只有一个根节点

要解决这个问题,请将 Loyalty.vue 模板的内容用根 div 包装起来。

<template>
    <!-- root div -->
    <div> 
      <Header />
      <div class="container main-content">
          <div class="row">
              <div class="col-lg-2"></div>
              <div class="col-lg-8">
                  <h3 style="font-weight: bold;color: #000;">What will you like to do?</h3>
                  <div class="col-lg-4 col-md-4 col-sm-4 col-xs-6 dash-menu-item">
                      <div class="item-body">
                          <router-link to="/dashboards" class="">
                              <i class="fa fa-user fa-4x"></i>
                              <p>View Dashboards</p>
                          </router-link>
                      </div>
                  </div>
                  <div class="col-lg-4 col-md-4 col-sm-4 col-xs-6 dash-menu-item">
                      <div class="item-body">
                          <router-link to="/home" class="">
                              <i class="fa fa-cogs fa-4x"></i>
                              <p>Manage Settings</p>
                          </router-link>
                      </div>
                  </div>
              </div>
              <div class="col-lg-2"></div>
          </div>
      </div>
    </div>
</template> 

【讨论】:

以上是关于如何从另一个组件调用 VueJS 组件的主要内容,如果未能解决你的问题,请参考以下文章

从另一个组件vue js和laravel调用方法

如何从另一个类调用 QMainWindow 组件?

如何在 flex-edited 中从另一个 mxml 组件调用 mxml 组件

如何从另一个组件调用一个函数,同时保持另一个组件在 Angular 中的通用性?

视图完全加载后如何从另一个组件调用方法(AppComponent)?

从另一个组件调用一个组件中的函数