最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Vue?刪除和增加自定義組件實(shí)戰(zhàn)教程

 更新時(shí)間:2024年08月03日 13:53:40   作者:呵呵噠( ̄▽?zhuān)?"  
Vue.js是一種流行的JavaScript框架,用于構(gòu)建交互式的Web應(yīng)用程序,在Vue.js中,我們可以通過(guò)動(dòng)態(tài)地增加和刪除組件來(lái)實(shí)現(xiàn)動(dòng)態(tài)頁(yè)面的構(gòu)建和更新,本文介紹Vue?刪除和增加自定義組件實(shí)戰(zhàn)教程,感興趣的朋友一起看看吧

RecommendFunction.vue 

<template>
    <div>
        <div v-for="(item, index) in dataList" :key="index" class="data-item">
            <div class="group-row">
                <el-form ref="item" :model="item" label-width="100px" :rules="rules" label-position="top"
                    style="width: 90%">
                    <el-form-item label="介紹" prop="title">
                        <el-input v-model="item.title" placeholder="請(qǐng)輸入介紹" />
                    </el-form-item>
                    <el-form-item label="品類(lèi)" prop="fruitCatagory" style="margin-top: 10px;">
                        <div style="display: flex; align-items: center;">
                            <el-select v-model="item.fruitCatagory" placeholder="請(qǐng)選擇" clearable
                                style="width: 200px; margin-right: 10px;" @change="handleNoRepeat">
                                <el-option v-for="option in getAvailableFruitCatagoryOptions(index)" :key="option.value"
                                    :label="option.label" :value="option.value" />
                            </el-select>
                            <el-input v-model="item.fruitDescription" placeholder="請(qǐng)輸入詳情" />
                        </div>
                    </el-form-item>
                    <el-form-item label="價(jià)格" prop="price" style="margin-top: 10px;">
                        <el-input v-model="item.price" placeholder="請(qǐng)輸入價(jià)格" type="number" min="0" max="100" />
                    </el-form-item>
                </el-form>
                <el-button icon="el-icon-delete" type="text" style="margin-left: 10px;" @click="deleteItem(index)" />
            </div>
        </div>
        <div v-if="haveAbleChoice" class="data-btn" @click="addItem">
            <i class="el-icon-plus" style="font-weight: bold; margin-right:5px;" />增加組件
        </div>
    </div>
</template>
<script>
export default {
    name: 'RecommendationConfig',
    props: {
        fruitOptions: {
            type: Array,
            required: true,
            default: () => []
        },
        dataList: {
            type: Array,
            required: true
        },
    },
    data() {
        return {
            itemStruct: {
                title: '',
                fruitCatagory: '',
                fruitDescription: '',
                price: 50
            },
            rules: {
                title: [{ required: true, message: '此項(xiàng)為必填', trigger: 'blur' }],
                fruitCatagory: [{ required: true, message: '此項(xiàng)為必填', trigger: 'blur' }],
                price: [{ required: true, message: '此項(xiàng)為必填', trigger: 'blur' }]
            }
        }
    },
    computed: {
        haveAbleChoice() {
            const selectedTypes = this.dataList.map(item => item.fruitCatagory);
            return this.fruitOptions.some(option => !selectedTypes.includes(option.value));
        }
    },
    methods: {
        /* eslint-disable */
        getAvailableFruitCatagoryOptions(index) {
            const selectedTypes = this.dataList
                .map((item, idx) => (idx !== index ? item.fruitCatagory : null))
                .filter(type => type !== null);
            return this.fruitOptions.filter(option => !selectedTypes.includes(option.value));
        },
        handleNoRepeat() {
            this.$forceUpdate();
        },
        addItem() {
            const selectedTypes = this.dataList.map(item => item.fruitCatagory);
            const firstAvailableType = this.fruitOptions.find(option => !selectedTypes.includes(option.value));
            if (firstAvailableType) {
                const itemData = JSON.parse(JSON.stringify(this.itemStruct));
                itemData.fruitCatagory = firstAvailableType.value;
                this.dataList.push(itemData);
            }
        },
        deleteItem(index) {
            this.dataList.splice(index, 1);
        }
    }
}
</script>
<style scoped>
.data-btn {
    width: 140px;
    height: 32px;
    display: flex;
    justify-content: center;
    align-items: center;
    border: 1px dashed #d9d9d9;
    background: #ffffff;
    padding: 4px 15px;
}
.data-btn:hover {
    cursor: pointer;
    color: #409EFF;
    border: 1px dashed #409EFF;
}
.data-btn:active {
    /* background: #f2f0f7; */
    background: #e3f5f2;
}
.data-item {
    margin: 0 0 24px;
    background-color: #e3f5f2;
    padding: 16px;
    border-radius: 8px;
}
.group-row {
    display: flex;
    flex-direction: row;
    align-items: end;
}
</style>

父組件引用:

 <RecommendFunction :data-list="form.dataList" :fruit-options="form.fruitOptions" />
export default {
  components: { RecommendFunction },
  data() {
    return {
      form: {
        fruitOptions: [
          { label: "蘋(píng)果", value: "0" },
          { label: "香蕉", value: "1" }
        ],
        dataList: []
      },
    }
   }
}

到此這篇關(guān)于Vue 刪除和增加自定義組件實(shí)戰(zhàn)教程的文章就介紹到這了,更多相關(guān)vue刪除和增加組件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Vue內(nèi)存泄漏的識(shí)別和解決方案

    Vue內(nèi)存泄漏的識(shí)別和解決方案

    Vue是人氣爆棚且地表最強(qiáng)的JS(JavaScript)框架,祂允許我們構(gòu)建動(dòng)態(tài)交互式的Web App,然但是,和任何軟件雷同,Vue App偶爾會(huì)遭遇內(nèi)存泄漏,導(dǎo)致性能暴跌和意外行為,今天,我們將深入Vue App內(nèi)存泄漏的原因,并探討識(shí)別和修復(fù)這些問(wèn)題的錦囊妙計(jì)
    2023-11-11
  • vue-cli 2.*中導(dǎo)入公共less文件的方法步驟

    vue-cli 2.*中導(dǎo)入公共less文件的方法步驟

    這篇文章主要介紹了vue-cli 2.*中導(dǎo)入公共less文件的方法步驟,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-11-11
  • vue3的基本使用方法詳細(xì)教程

    vue3的基本使用方法詳細(xì)教程

    這篇文章主要介紹了vue3的基本使用方法,結(jié)合實(shí)例形式詳細(xì)分析了vue3功能、組件、生命周期、TypeScript結(jié)合運(yùn)用等相關(guān)概念與使用方法,需要的朋友可以參考下
    2023-06-06
  • vue視圖響應(yīng)式更新詳細(xì)介紹

    vue視圖響應(yīng)式更新詳細(xì)介紹

    這篇文章主要介紹了Vue響應(yīng)式原理,響應(yīng)式就是當(dāng)對(duì)象本身(對(duì)象的增刪值)或者對(duì)象屬性(重新賦值)發(fā)生了改變的時(shí)候,就會(huì)運(yùn)行一些函數(shù),最常見(jiàn)的示render函數(shù)
    2022-09-09
  • 如何用vue-pdf包實(shí)現(xiàn)pdf文件預(yù)覽,支持分頁(yè)

    如何用vue-pdf包實(shí)現(xiàn)pdf文件預(yù)覽,支持分頁(yè)

    這篇文章主要介紹了如何用vue-pdf包實(shí)現(xiàn)pdf文件預(yù)覽,支持分頁(yè)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • 使用Vue實(shí)現(xiàn)點(diǎn)擊按鈕小球加入購(gòu)物車(chē)動(dòng)畫(huà)

    使用Vue實(shí)現(xiàn)點(diǎn)擊按鈕小球加入購(gòu)物車(chē)動(dòng)畫(huà)

    這篇文章主要為大家詳細(xì)介紹了如何使用Vue實(shí)現(xiàn)點(diǎn)擊按鈕小球加入購(gòu)物車(chē)動(dòng)畫(huà),文中的示例代碼講解詳細(xì),有需要的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-03-03
  • Vue3前端生成隨機(jī)id(生成?UUID)實(shí)際運(yùn)用

    Vue3前端生成隨機(jī)id(生成?UUID)實(shí)際運(yùn)用

    前端在做增刪改查時(shí)通常會(huì)使??個(gè)唯?數(shù)值做為數(shù)據(jù)的key值,下面這篇文章主要給大家介紹了關(guān)于Vue3前端生成隨機(jī)id(生成?UUID)的相關(guān)資料,文中給出了詳細(xì)的代碼示例,需要的朋友可以參考下
    2024-04-04
  • 如何使用Vue進(jìn)行文件預(yù)覽與打印功能

    如何使用Vue進(jìn)行文件預(yù)覽與打印功能

    這篇文章主要給大家介紹了關(guān)于如何使用Vue進(jìn)行文件預(yù)覽與打印功能的相關(guān)資料,這個(gè)功能其實(shí)也是自己學(xué)習(xí)到的,做完也有一段時(shí)間了,一直想記錄總結(jié)一下,需要的朋友可以參考下
    2023-10-10
  • 使用provide/inject實(shí)現(xiàn)跨組件通信的方法

    使用provide/inject實(shí)現(xiàn)跨組件通信的方法

    在 Vue 應(yīng)用中,組件間通信是構(gòu)建復(fù)雜應(yīng)用時(shí)的一個(gè)常見(jiàn)需求,Vue3.x 提供了provide和inject API,讓跨組件通信變得更加簡(jiǎn)潔和高效,本文將深入探討如何使用provide和inject在Vue3.x中實(shí)現(xiàn)跨組件通信,并通過(guò)示例代碼一步步進(jìn)行說(shuō)明,需要的朋友可以參考下
    2024-03-03
  • vue body的背景圖片屬性設(shè)置方式

    vue body的背景圖片屬性設(shè)置方式

    在Vue中,背景圖跨頁(yè)面顯示問(wèn)題可通過(guò)生命周期鉤子(如mounted和beforeDestroy)實(shí)現(xiàn)動(dòng)態(tài)控制,確保僅在主頁(yè)加載背景圖,登錄頁(yè)等其他頁(yè)面可移除,從而實(shí)現(xiàn)差異化樣式應(yīng)用
    2025-08-08

最新評(píng)論

昌江| 宜阳县| 勃利县| 高尔夫| 灌阳县| 府谷县| 嵊泗县| 仁布县| 泰来县| 西华县| 义马市| 百色市| 昌江| 绥德县| 石屏县| 隆林| 龙游县| 江源县| 滦南县| 通渭县| 深水埗区| 闽侯县| 西峡县| 瑞昌市| 平湖市| 博兴县| 隆化县| 乳源| 盐池县| 元阳县| 竹山县| 曲沃县| 贵州省| 上思县| 稷山县| 英超| 山阳县| 柳江县| 阿拉善右旗| 肃南| 蕲春县|