如何用新ID和同名制作数组对象的克隆?

发布于 2025-02-09 17:39:15 字数 2353 浏览 1 评论 0原文

我是Vue3和JavaScript的新手。我有2个列表和拖放系统。问题是当我将组件从一个列表拖放到另一个列表时,我将ID增加1个,但是我无法获得拖动对象的名称并显示它。在方法“ clonecontent”中显示的问题

<template>
  <div class="full-zone">
    <div class="components">
      <h3>Компоненты бота:</h3>
      <draggable
          class="dragArea"
          :list="list1"
          :group="{ name: 'people', pull: 'clone', put: false }"
          :clone="cloneComponent"
          @change="log"
          item-key="id"
      >
        <template #item="{element}">
          <div class="list-group-item">
            {{ element.name }}
          </div>
        </template>
      </draggable>
    </div>

    <div class="constructor">
      <h3>Конструктор</h3>
      <draggable
          class="constructor-list"
          :list="list2"
          group="people"
          @change="log"
          item-key="id"
      >
        <template #item="{ element, index }">
          <div class="list-group-item">
            {{ element.name }}
            <div>
              <input type="text" class="input" v-model="element.text" placeholder="Введите текст компонента" />
              <span @click="remove(index)" class="remove">x</span>
            </div>
          </div>
        </template>
      </draggable>
    </div>

    <div>
      <button class="btn">Сгенерировать бота</button>
    </div>
    <rawDisplayer class="col-3" :value="list1" title="List 1" />
    <rawDisplayer class="col-3" :value="list2" title="List 2" />
  </div>
</template>

<script>
import draggable from "vuedraggable";
let idGlobal = 4;
export default {
  name: "clone",
  display: "Clone",
  order: 2,
  components: {
    draggable
  },
  data() {
    return {
      list1: [
        { name: "Сообщение", text: "", id: 1 },
        { name: "Заметка", text: "", id: 2 },
        { name: "Кнопка", text: "", id: 3 },

      ],
      list2: []
    };
  },
  methods: {
    log: function(evt) {
      window.console.log(evt);
    },
    cloneComponent() {
      return {
        id: idGlobal ++,
      }
    },
    remove(idx) {
      this.list2.splice(idx, 1);
    },

  }
};
</script>

不仅如何返回“ id”,还可以同时返回“ name”?请帮忙。

I'm new at vue3 and javascript. I have 2 lists and drag and drop system. The problem is when I drag and drop component from one list to another, I increase an id by 1, but I can't get the name of dragged object and display it. The problem displayed at methods in method "cloneComponent"

<template>
  <div class="full-zone">
    <div class="components">
      <h3>Компоненты бота:</h3>
      <draggable
          class="dragArea"
          :list="list1"
          :group="{ name: 'people', pull: 'clone', put: false }"
          :clone="cloneComponent"
          @change="log"
          item-key="id"
      >
        <template #item="{element}">
          <div class="list-group-item">
            {{ element.name }}
          </div>
        </template>
      </draggable>
    </div>

    <div class="constructor">
      <h3>Конструктор</h3>
      <draggable
          class="constructor-list"
          :list="list2"
          group="people"
          @change="log"
          item-key="id"
      >
        <template #item="{ element, index }">
          <div class="list-group-item">
            {{ element.name }}
            <div>
              <input type="text" class="input" v-model="element.text" placeholder="Введите текст компонента" />
              <span @click="remove(index)" class="remove">x</span>
            </div>
          </div>
        </template>
      </draggable>
    </div>

    <div>
      <button class="btn">Сгенерировать бота</button>
    </div>
    <rawDisplayer class="col-3" :value="list1" title="List 1" />
    <rawDisplayer class="col-3" :value="list2" title="List 2" />
  </div>
</template>

<script>
import draggable from "vuedraggable";
let idGlobal = 4;
export default {
  name: "clone",
  display: "Clone",
  order: 2,
  components: {
    draggable
  },
  data() {
    return {
      list1: [
        { name: "Сообщение", text: "", id: 1 },
        { name: "Заметка", text: "", id: 2 },
        { name: "Кнопка", text: "", id: 3 },

      ],
      list2: []
    };
  },
  methods: {
    log: function(evt) {
      window.console.log(evt);
    },
    cloneComponent() {
      return {
        id: idGlobal ++,
      }
    },
    remove(idx) {
      this.list2.splice(idx, 1);
    },

  }
};
</script>

How to return not only "id", but "name" at the same time? Please help.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

墨落成白 2025-02-16 17:39:15

您需要将项目发送到其他列表

// tolist = can be 1 or 2
cloneComponent(item, tolist) {
    if (tolist === 2) {
        this.list2.push(item)
    } else {
        this.list1.push(item)
    }
}

You need to send the item to the other list

// tolist = can be 1 or 2
cloneComponent(item, tolist) {
    if (tolist === 2) {
        this.list2.push(item)
    } else {
        this.list1.push(item)
    }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文