Vue hace clic en el botón para crear y eliminar componentes dinámicamente

Principales requisitos funcionales:

  1. Haga clic en el botón de la biblioteca de componentes a la izquierda para crear los diferentes componentes correspondientes y mostrarlos en el área derecha
  2. Haga clic en el botón eliminar en el componente creado a la derecha para eliminar el componente correspondiente
  3. Después de eliminar el componente correspondiente, la posición del componente a continuación se mueve automáticamente hacia arriba

Imagen de efecto:

-Insertar imagen

Código:

  1. Código del componente principal (con el código de estilo CSS eliminado):
<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. Código del subcomponente 1 (con el código de estilo CSS eliminado):
<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. Código del subcomponente 2 (con el código de estilo CSS eliminado):
<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>
Grupo QQ de comunicación web front-end: 327814892

Supongo que te gusta

Origin blog.csdn.net/qq_43327305/article/details/103731533
Recomendado
Clasificación