使用的是vue2.0,如何动态添加组件。例如实现点击A按钮添加aTest组件,点击B按钮添加bTest组件。

使用的是vue2.0,如何动态添加组件。例如实现点击A按钮添加<aTest></aTest>,点击B按钮添加<bTest></bTest>。
使用v-for只能循环写单个组件,使用动态组件也只能不断切换单个组件,想动态添加多个不同的组件暂时没想到怎么做,希望大家可以帮帮忙,或者交流一下,谢谢!
阅读 40.8k
6 个回答

可以把組件名稱記起來,就可以根據組件名稱來渲染特定組件(數據驅動)

預覽

html

  <div id="app">
    <button @click="add('a-component', 'test')">Add A</button>
    <button @click="add('b-component', 'test')">Add B</button>
    <ul>
      <li :is="item.component" :text="item.text" v-for="item in items"></li>
    </ul>
  </div>

javascript

var AComponent = Vue.extend({
  props: ['text'],
  template: '<li>A Component: {{ text }}</li>'
})

var BComponent = Vue.extend({
  props: ['text'],
  template: '<li>B Component: {{ text }}</li>'
})


new Vue({
  el: '#app',
  components: {
    'a-component': AComponent,
    'b-component': BComponent,
  },
  data: {
    items: []
  },
  methods: {
    add(component, text) {
      this.items.push({
        'component': component,
        'text': text,
      })
    }
  }
})

我是用v-for 加 :is绑定解决。

新手上路,请多包涵

为什么我写的时候就会报You are using the runtime-only build of Vue where the template compiler is not available. Either pre-compile the templates into render functions, or use the compiler-included build. 的错误,难道是因为我写在.vue里面,通过export default去操作的?

<aTest v-show="flagA"></aTest>
<bTest v-show="flagB"></bTest>

将flagA和flagB都初始化成false,点击A按钮和B按钮后分别变成true

我是写在父组件中的:

Vue.component('mycontent', {
        props: ['content'],
        data() {
            return {
                coms: [],
            }
        },
        render: function(h) {
            this.coms = [];
            for(var i = 0; i < this.content.length; i++) {
                this.coms.push(h(this.content[i], {}))
            }
            return h('div', {},
                this.coms)
        },
    });

调用的时候

<mycontent v-bind:content="content"></mycontent>

那么父组件中的content变化时,就会动态加载组件了

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
1 篇内容引用
推荐问题
宣传栏