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: "蘋果", 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)航隱藏與顯示功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-09-09
vue3.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-開頭的,它們作用于HTML元素,指令提供了一些特殊的特性。這篇文章主要介紹了Vue的常用指令v-if, v-for, v-show,v-else, v-bind, v-on 的相關(guān)知識(shí),需要的朋友可以參考下2018-10-10
Vue實(shí)現(xiàn)半自動(dòng)打字機(jī)特效
本文主要介紹了Vue實(shí)現(xiàn)半自動(dòng)打字機(jī)特效,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-12-12
vue-cli 3如何使用vue-bootstrap-datetimepicker日期插件
這篇文章主要介紹了vue-cli 3如何使用vue-bootstrap-datetimepicker日期插件,幫助大家更好的理解和學(xué)習(xí)使用vue框架,感興趣的朋友可以了解下2021-02-02
vue打包通過image-webpack-loader插件對(duì)圖片壓縮優(yōu)化操作
這篇文章主要介紹了vue打包通過image-webpack-loader插件對(duì)圖片壓縮優(yōu)化操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-11-11
Vue項(xiàng)目中最新用到的一些實(shí)用小技巧
這篇文章主要給大家介紹了關(guān)于Vue項(xiàng)目中最新用到的一些實(shí)用小技巧,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用vue具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-11-11
vue踩坑記之npm?install報(bào)錯(cuò)問題解決總結(jié)
當(dāng)你跑起一個(gè)項(xiàng)目的時(shí)候,第一步需要先安裝依賴npm install,下面這篇文章主要給大家介紹了關(guān)于vue踩坑之npm?install報(bào)錯(cuò)問題解決的相關(guān)資料,需要的朋友可以參考下2022-06-06

