在 vue 可拖动的每次更改后获取数组 ID

Posted

技术标签:

【中文标题】在 vue 可拖动的每次更改后获取数组 ID【英文标题】:Grab array IDs after each change on vue draggable 【发布时间】:2021-05-22 04:00:35 【问题描述】:

所以我想看看是否有人熟悉这个,看看是否有人可以就我正在尝试做的事情给我一些指导:

这是我拥有的Vue.js 应用程序:

new Vue(
    name: 'o365-edit-modal-wrapper',
    el: '#o365-modal-edit-wrapper',
    data: function() 
        return 
            list: ,
        
    ,

    // Call the methods inside the created lifecycle triggers on initial website load.
    created() 
        this.getMenuObjects('applications');
    ,
    methods: 
        getMenuObjects(slug) 
            var self = this;
            wp.api.loadPromise.done(function () 
                const Posts = wp.api.models.Post.extend(
                    url: wpApiSettings.root + 'fh/v1/menus/' + slug,
                );
                const all_posts = new Posts();
                all_posts.fetch()
                    .then(function (obj) 
                        if (obj.status === 'success') 
                            self.list = obj.data;
                         else 
                            // Display use response here
                        
                    );
            );
        ,
        changed(evt) 
          console.log(evt);
        ,
        onMove( relatedContext, draggedContext ) 
            const relatedElement = relatedContext.element;
            const draggedElement = draggedContext.element;
            return (
                (!relatedElement || !relatedElement.fixed) && !draggedElement.fixed
            );
        ,
    ,
    computed: 
        dragOptions() 
            // Pass in additional <draggable> options inside the return for both lists.
            return 
                tag: 'div',
                group: 'o365apps',
                disabled: !this.movable,
                ghostClass: "ghost",
            ;
        ,
    ,
);

我有一个 list: 对象,它抓取我的两个列表数组 selectedavailable 并将它们呈现在前端,如下所示:

<div id="o365-modal-edit-wrapper">
    <div class="columns is-reversed-mobile">
        <div class="column is-half-desktop is-full-mobile buttons">
            <div class="is-size-5 has-text-left">Available</div>
            <hr class="mt-1 mb-3">
            <draggable class="list-group"
                       v-model="list.available"
                       v-bind="dragOptions"
                       :move="onMove">
                <button class="button is-fullwidth is-flex list-group-item o365_app_handle level is-mobile" v-for="(app, index) in list.available" :key="app.id">
                    <div class="level-left">
                        <span class="icon" aria-hidden="true">
                            <img :src="app.icon_url" />
                        </span>
                        <span>app.name</span>
                    </div>
                    <div class="level-right is-hidden-desktop">
                        <span class="icon has-text-primary is-clickable" @click="mobileClickAdd(index)">
                          <i class="fas fa-check"></i>
                        </span>
                    </div>
                </button>
            </draggable>
        </div>
        <div class="column is-half-desktop is-full-mobile buttons">
            <nav class="level is-mobile mb-0">
                <div class="level-left">
                    <div class="level-item is-size-5 has-text-left">Selected</div>
                </div>
                <div class="level-right">
                    <div class="level-item" @click="orderList()"><i class="fas fa-sort-alpha-up is-clickable"></i></div>
                </div>
            </nav>
            <hr class="mt-1 mb-3">
            <draggable class="list-group"
                       v-model="list.selected"
                       v-bind="dragOptions"
                       :move="onMove"
                       @change="changed">
                <button class="button is-fullwidth is-flex list-group-item o365_app_handle level is-mobile" v-for="(app, index) in list.selected" :key="app.id">
                    <div class="level-left">
                            <span class="icon" aria-hidden="true">
                                <img :src="app.icon_url" />
                            </span>
                        <span>app.name</span>
                    </div>
                    <div class="level-right is-hidden-desktop">
                        <span class="icon has-text-danger is-clickable" @click="mobileClickRemove(index)">
                          <i class="fas fa-times"></i>
                        </span>
                    </div>
                </button>
            </draggable>
        </div>
    </div>
</div>

这是我的@change 回调的作用:

问题

如何在每次更改时从数组中提取 list.selected ID,因此当有人添加项目或删除项目时 - 我可以看到每次拖动的 ID,但有没有办法获取所有数组中的 ID 一次?

【问题讨论】:

【参考方案1】:

您可以在数组中使用 map 函数来一次获取数组中的所有 id

您可以查看https://www.w3schools.com/jsref/jsref_map.asp了解更多信息

【讨论】:

以上是关于在 vue 可拖动的每次更改后获取数组 ID的主要内容,如果未能解决你的问题,请参考以下文章

获取我拖动元素的 div 的 id

在VUE js中获取数组中数据的索引

Jquery droppable 获取可拖动的id

Vue 列表项不会在状态更改时重新渲染

百度地图拖动标注后获取坐标

如何获取可拖动标记android的坐标?