如何动态嵌套 vue 组件?

Posted

技术标签:

【中文标题】如何动态嵌套 vue 组件?【英文标题】:How can I dynamically nest vue components? 【发布时间】:2018-07-31 21:08:45 【问题描述】:

当用户单击按钮时,我想在另一个组件中添加一个组件。但是我们如何在虚拟 dom 中渲染组件。 我尝试使用 v-html 但它不起作用。 解决此问题的最佳方法是什么?

export default 
    data()
        return
            elements : 
                hotel : '<hotel-form></hotel-form>'
            ,
            

        
    ,
  methods:
      addHotel()
          
          console.log('add');
      
  
<template>
  <div class="container" style="margin-top:300px;">
      <div class="row" id="mainform">
          <div v-for="item in elements">
              <div v-html="item"></div>
          </div>

      </div>
      <button @click="addHotel()">add hotel</button>
  </div>
</template>

【问题讨论】:

这是关于酒店列表还是可以包含其他组件类型的元素列表? 它不是酒店列表,但 hotel-form 组件包含一个用于添加新酒店的表单。 所以您的列表中有多个酒店表格?或者为什么不在按下按钮时切换表单的可见性? 这是一个很好的方法,但我也有多种表格用于酒店、航班和航班暂停等。所以这就是我想动态做的原因。是否有可能用 vue 实现这种行为 好的,我明白了。您没有任何数据需要传递给您的表单吗? 【参考方案1】:

我会通过v-for 将数组 (hotels) 绑定到&lt;hotel-form&gt; 组件标签。这样,最初不会渲染hotel-form 组件,然后您可以将一个对象(任何要绑定到hotel-form 组件的数据)推送到hotels 数组,DOM 将自动渲染一个新的对应@ 987654327@组件。

这是一个简单的例子:

Vue.component('hotel-form', 
  template: '#hotel-form',
  props:  id: Number, name: String ,
);

new Vue(
  el: '#app',
  data() 
    return  hotels: [], count: 0 
  ,
  methods: 
    addHotel() 
      this.hotels.push( name: 'foo', id: this.count++ )
    
  
);
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.13/vue.min.js"></script>

<div id="app">
  <div id="mainform">
    <hotel-form v-for="hotel in hotels" :key="hotel.id" v-bind="hotel">
    </hotel-form>
  </div>
  <button @click="addHotel">add hotel</button>
</div>

<template id="hotel-form">
  <div>
    <h4>Hotel Form # id </h4>
    <div> name </div>
  </div>
</template>

【讨论】:

以上是关于如何动态嵌套 vue 组件?的主要内容,如果未能解决你的问题,请参考以下文章

如何将数据从 Vue 实例传递给嵌套组件

如何将数据从 Vue 实例传递给嵌套组件

vue路由嵌套,如何子路由也有选中样式

如何使用嵌套的 json 对象填充 vue 条件库中的 vue 组件

承诺解决并将道具传递给嵌套子项时如何更新Vue组件

Vue JS 2. 如何防止在两个父级之间导航时重新加载相同的嵌套组件?