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="品類" 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 路由meta 設(shè)置導(dǎo)航隱藏與顯示功能的示例代碼
這篇文章主要介紹了vue 路由meta 設(shè)置導(dǎo)航隱藏與顯示功能,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-09-09vue項(xiàng)目檢測(cè)依賴包是否有使用的問(wèn)題
這篇文章主要介紹了vue項(xiàng)目檢測(cè)依賴包是否有使用的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-08-08vue3.0運(yùn)行npm run dev報(bào)錯(cuò)Cannot find module&
本文主要介紹了vue3.0運(yùn)行npm run dev報(bào)錯(cuò)Cannot find module node:url,因?yàn)槭褂玫膎ode版本是14.15.1低于15.0.0導(dǎo)致,具有一定的參考價(jià)值,感興趣的可以了解一下2023-10-10詳解Vue的常用指令v-if, v-for, v-show,v-else, v-bind, v-on
Vue.js的指令是以v-開(kāi)頭的,它們作用于HTML元素,指令提供了一些特殊的特性。這篇文章主要介紹了Vue的常用指令v-if, v-for, v-show,v-else, v-bind, v-on 的相關(guān)知識(shí),需要的朋友可以參考下2018-10-10Vue實(shí)現(xiàn)半自動(dòng)打字機(jī)特效
本文主要介紹了Vue實(shí)現(xiàn)半自動(dòng)打字機(jī)特效,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-12-12vue-cli 3如何使用vue-bootstrap-datetimepicker日期插件
這篇文章主要介紹了vue-cli 3如何使用vue-bootstrap-datetimepicker日期插件,幫助大家更好的理解和學(xué)習(xí)使用vue框架,感興趣的朋友可以了解下2021-02-02vue打包通過(guò)image-webpack-loader插件對(duì)圖片壓縮優(yōu)化操作
這篇文章主要介紹了vue打包通過(guò)image-webpack-loader插件對(duì)圖片壓縮優(yōu)化操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-11-11Vue項(xiàng)目中最新用到的一些實(shí)用小技巧
這篇文章主要給大家介紹了關(guān)于Vue項(xiàng)目中最新用到的一些實(shí)用小技巧,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用vue具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2018-11-11vue踩坑記之npm?install報(bào)錯(cuò)問(wèn)題解決總結(jié)
當(dāng)你跑起一個(gè)項(xiàng)目的時(shí)候,第一步需要先安裝依賴npm install,下面這篇文章主要給大家介紹了關(guān)于vue踩坑之npm?install報(bào)錯(cuò)問(wèn)題解決的相關(guān)資料,需要的朋友可以參考下2022-06-06