vue点击按钮动态创建与删除组件

主要功能需求点:
  1. 点击左侧组件库按钮创建对应的不同的组件,并在右侧区域展示
  2. 点击右侧创建的组件中的删除按钮,删除对应的组件
  3. 删除对应的组件之后,下方的组件位置自动上移
效果图:

- 插入图片

代码:
  1. 父组件代码(去除了css样式代码):
<template>
  <div class="home">
    <div class="container">
      <div class="addZujian">
        <div>
          <span>组件库</span>
          <span style="color:#bbb;margin-left:10px;font-size:14px;">点击使用</span>
        </div>
        <div class="zujianBtn" @click="zujian">添加组件1</div>
        <div class="zujianBtn" @click="zujian2">添加组件2</div>
      </div>
      <div class="zujianContent">
        <div>组件展示区</div>
        <!-- Vue提供了 component ,来展示对应名称的组件 -->
        <!-- component 是一个占位符, :is 属性,可以用来指定要展示的组件的名称 -->
        <component
          v-for="(item,index) in comName"
          :is="item.name"
          :key="index"
          @func="getContent(index)"
        ></component>
      </div>
    </div>
  </div>
</template>
<script>
// 引入子组件
import zujian1 from "./zujian";
import zujian2 from "./zujian2";
export default {
  data() {
    return {
      comName: []
    };
  },
  components: {
    zujian1,
    zujian2
  },
  methods: {
    // 添加组件1
    zujian() {
      this.comName.push({
        name: "zujian1"
      });
    },
    // 添加组件2
    zujian2() {
      this.comName.push({
        name: "zujian2"
      });
    },
    // 删除组件
    getContent(index) {
      this.comName.splice(index, 1);
    }
  }
};
</script>
  1. 子组件1代码(去除了css样式代码):
<template>
  <div class="home">
    <div class="container">
      <span>我是组件1</span>
      <span class="del" @click="del">删除组件</span>
    </div>
  </div>
</template>
<script>
export default {
  data() {
    return {};
  },
  methods: {
    del() {
      // 子组件向父组件传值(此处传递一个空值) - 父组件将执行getContent方法
      this.$emit('func','')
    }
  }
};
</script>
  1. 子组件2代码(去除了css样式代码):
<template>
  <div class="home">
    <div class="container">
      <span>我是组件2</span>
      <span class="del" @click="del">删除组件</span>
    </div>
  </div>
</template>
<script>
export default {
  data() {
    return {};
  },
  methods: {
    del() {
      // 子组件向父组件传值(此处传递一个空值) - 父组件将执行getContent方法
      this.$emit("func", "");
    }
  }
};
</script>

前端进阶精选:点此去

  • 6
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值