中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Vue實現穿梭框功能的代碼是什么

發布時間:2021-10-23 16:05:04 來源:億速云 閱讀:249 作者:iii 欄目:開發技術

本篇內容介紹了“Vue實現穿梭框功能的代碼是什么”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

Vue - 實現穿梭框功能,效果圖如下所示:

Vue實現穿梭框功能的代碼是什么

css

.transfer{
    display: flex;
    justify-content: center;
    align-items: center;
}
.transfer>.list {
    width: 200px;
    height: 300px;
    border: 1px solid #000;
    list-style: none;
}
.content{
    font-size: 30px;
    margin: 0 20px;
}
.list>li{
    padding: 5px;
    box-sizing: border-box;
}

HTML

<div class="transfer" >
    <!-- 左框 -->
    <ul class="list left">
        <template v-for="(item, index) in info">
            <li :key="index">
                <input type="checkbox" :id=`checkbox${item.id}` name="checkbox" :checked="item.select" @click="item.select=!item.select"  />
                <label :for=`checkbox${item.id}` >{{ item.name }} </label>
            </li>
        </template>
    </ul>

    <!-- 添加/刪除 -->
    <div class="content">
        <p class="push" @click='push' >>>></p>
        <p class="del"  @click='del' ><<<</p>
    </div>

    <!-- 右框 -->
    <ul class="list right">
        <template v-for="(item, index) in new_info">
            <li :key="index" >
                <input type="checkbox" :id=`newcheckbox${item.id}` name="newcheckbox" :checked="item.select" @click="item.select=!item.select"  />
                <label :for=`newcheckbox${item.id}`>{{ item.name }} </label>
            </li>
        </template>
    </ul>
</div>

js

data(){
    return{
        // 原數據,左框數據
        info:[
            {id:'1',name:'小明'},
            {id:'2',name:'小紅'},
            {id:'3',name:'小雞'},
            {id:'4',name:'哈哈哈哈'},
            {id:'5',name:'啊啊啊啊'},
            {id:'6',name:'dddd'},
            {id:'7',name:'qwert'},
        ],
        new_info: [],// 新數據,右框數據
    }
},
methods:{// 添加數據
    push(){
        let that = this;
        let info = JSON.parse(JSON.stringify(that.info)); // 拷貝原數據, 深拷貝
        info.forEach((item, index )=>{
            // 執行 select 為true 的數據
            if (item.select){
                that.new_info = that.new_info.concat(item).sort((a,b)=>{ return a.id - b.id }); // 添加到新數據框, 排序
                delete info[index];    // 刪除數據
                item.select = false; 
            }
        })
        info = info.filter(function (val) { return val }); // 過濾 undefined 
        that.info = info; // 更新原數據\
    },
    // 移除數據
    del(){
        let that = this;
        let info = JSON.parse(JSON.stringify(that.new_info)); // 拷貝原數據, 深拷貝
        info.forEach((item, index )=>{
            // 執行 select 為true 的數據
            if (item.select){
                that.info = that.info.concat(item).sort((a,b)=>{ return a.id - b.id }); // 添加到新數據框, 排序
                delete info[index];    // 刪除數據
                item.select = false;
            }
        })
        info = info.filter(function (val) { return val }); // 過濾 undefined 
        that.new_info = info; // 更新原數據
    },
},

mounted(){
    let that = this;
    // 給原始數據添加一個 select 字段,判斷是否選中
    that.info.map((val,key)=>{ that.$set(val,'select',false) });
}

********************************************************************************************************************************************************

這里使用splice刪除數據會有問題 this.info.splice(index,1);當選中多個元素時,會發現只刪除掉其中一些元素,而還有一些選中的元素還存在因為當刪除掉了一個元素后,數組的索引發生的變化,造成了程序的異常。所以就使用了 delete清除數據,然后再 filter過濾 undefined大概思路: 給數據添加一個 select 字段,用多選框的 checked 綁定, click 的時候該字段實現取反轉移數據時,只執行 select 為 true 的數據,添加到新數據框中,再把原先的刪除

“Vue實現穿梭框功能的代碼是什么”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

vue
AI

双流县| 威远县| 启东市| 黔东| 石河子市| 汉中市| 万安县| 永清县| 洛川县| 安达市| 肇庆市| 西和县| 交城县| 明溪县| 新源县| 曲沃县| 嘉鱼县| 临武县| 镇巴县| 镇康县| 五家渠市| 永城市| 施甸县| 芦溪县| 淅川县| 格尔木市| 达孜县| 泸定县| 江北区| 隆尧县| 察哈| 九龙县| 宝丰县| 沂源县| 通榆县| 嵊州市| 中西区| 阳东县| 萍乡市| 美姑县| 都昌县|