Vue?刪除和增加自定義組件實戰(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="請輸入介紹" />
</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="請選擇" 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="請輸入詳情" />
</div>
</el-form-item>
<el-form-item label="價格" prop="price" style="margin-top: 10px;">
<el-input v-model="item.price" placeholder="請輸入價格" 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: '此項為必填', trigger: 'blur' }],
fruitCatagory: [{ required: true, message: '此項為必填', trigger: 'blur' }],
price: [{ required: true, message: '此項為必填', 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 刪除和增加自定義組件實戰(zhàn)教程的文章就介紹到這了,更多相關(guān)vue刪除和增加組件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
vue 路由meta 設(shè)置導(dǎo)航隱藏與顯示功能的示例代碼
這篇文章主要介紹了vue 路由meta 設(shè)置導(dǎo)航隱藏與顯示功能,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-09-09
vue3.0運行npm run dev報錯Cannot find module&
本文主要介紹了vue3.0運行npm run dev報錯Cannot find module node:url,因為使用的node版本是14.15.1低于15.0.0導(dǎo)致,具有一定的參考價值,感興趣的可以了解一下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)知識,需要的朋友可以參考下2018-10-10
vue-cli 3如何使用vue-bootstrap-datetimepicker日期插件
這篇文章主要介紹了vue-cli 3如何使用vue-bootstrap-datetimepicker日期插件,幫助大家更好的理解和學(xué)習(xí)使用vue框架,感興趣的朋友可以了解下2021-02-02
vue打包通過image-webpack-loader插件對圖片壓縮優(yōu)化操作
這篇文章主要介紹了vue打包通過image-webpack-loader插件對圖片壓縮優(yōu)化操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-11-11
vue踩坑記之npm?install報錯問題解決總結(jié)
當你跑起一個項目的時候,第一步需要先安裝依賴npm install,下面這篇文章主要給大家介紹了關(guān)于vue踩坑之npm?install報錯問題解決的相關(guān)資料,需要的朋友可以參考下2022-06-06

