您好,登录后才能下订单哦!
在现代Web开发中,Vue.js因其简洁、灵活和高效的特点,成为了前端开发的热门选择。而Element UI作为一套基于Vue.js的桌面端组件库,提供了丰富的UI组件,使得开发者能够快速构建出美观且功能强大的用户界面。本文将详细介绍如何使用Vue.js和Element UI实现一个商品列表的增删改功能。
在开始实现商品列表的增删改功能之前,我们需要先搭建一个Vue.js项目,并引入Element UI库。
首先,确保你已经安装了Node.js和Vue CLI。如果还没有安装,可以通过以下命令进行安装:
npm install -g @vue/cli
然后,使用Vue CLI创建一个新的Vue项目:
vue create product-list
在创建项目时,选择默认配置或手动选择需要的特性。
进入项目目录并安装Element UI:
cd product-list
npm install element-ui --save
在src/main.js
中引入Element UI并注册:
import Vue from 'vue';
import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';
import App from './App.vue';
Vue.use(ElementUI);
new Vue({
render: h => h(App),
}).$mount('#app');
在src/components
目录下创建一个名为ProductList.vue
的组件文件,并在src/App.vue
中引入并使用该组件。
<!-- src/App.vue -->
<template>
<div id="app">
<ProductList />
</div>
</template>
<script>
import ProductList from './components/ProductList.vue';
export default {
components: {
ProductList
}
};
</script>
在ProductList.vue
中,我们将使用Element UI的el-table
组件来展示商品列表。
首先,定义一个商品数据数组,包含商品的名称、价格和库存等信息。
<!-- src/components/ProductList.vue -->
<template>
<div>
<el-table :data="products" style="width: 100%">
<el-table-column prop="name" label="商品名称"></el-table-column>
<el-table-column prop="price" label="价格"></el-table-column>
<el-table-column prop="stock" label="库存"></el-table-column>
</el-table>
</div>
</template>
<script>
export default {
data() {
return {
products: [
{ id: 1, name: '商品A', price: 100, stock: 10 },
{ id: 2, name: '商品B', price: 200, stock: 20 },
{ id: 3, name: '商品C', price: 300, stock: 30 }
]
};
}
};
</script>
为了实现对商品的增删改操作,我们需要在表格中添加一个操作列,包含编辑和删除按钮。
<!-- src/components/ProductList.vue -->
<template>
<div>
<el-table :data="products" style="width: 100%">
<el-table-column prop="name" label="商品名称"></el-table-column>
<el-table-column prop="price" label="价格"></el-table-column>
<el-table-column prop="stock" label="库存"></el-table-column>
<el-table-column label="操作">
<template slot-scope="scope">
<el-button type="primary" size="mini" @click="handleEdit(scope.$index, scope.row)">编辑</el-button>
<el-button type="danger" size="mini" @click="handleDelete(scope.$index, scope.row)">删除</el-button>
</template>
</el-table-column>
</el-table>
</div>
</template>
<script>
export default {
data() {
return {
products: [
{ id: 1, name: '商品A', price: 100, stock: 10 },
{ id: 2, name: '商品B', price: 200, stock: 20 },
{ id: 3, name: '商品C', price: 300, stock: 30 }
]
};
},
methods: {
handleEdit(index, row) {
console.log('编辑商品', index, row);
},
handleDelete(index, row) {
console.log('删除商品', index, row);
}
}
};
</script>
接下来,我们将实现添加商品的功能。我们将使用Element UI的el-dialog
组件来创建一个添加商品的弹窗。
在ProductList.vue
中添加一个弹窗组件,用于输入新商品的信息。
<!-- src/components/ProductList.vue -->
<template>
<div>
<el-button type="primary" @click="dialogVisible = true">添加商品</el-button>
<el-dialog title="添加商品" :visible.sync="dialogVisible" width="30%">
<el-form :model="newProduct" label-width="80px">
<el-form-item label="商品名称">
<el-input v-model="newProduct.name"></el-input>
</el-form-item>
<el-form-item label="价格">
<el-input v-model="newProduct.price"></el-input>
</el-form-item>
<el-form-item label="库存">
<el-input v-model="newProduct.stock"></el-input>
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button @click="dialogVisible = false">取 消</el-button>
<el-button type="primary" @click="handleAdd">确 定</el-button>
</span>
</el-dialog>
<el-table :data="products" style="width: 100%">
<el-table-column prop="name" label="商品名称"></el-table-column>
<el-table-column prop="price" label="价格"></el-table-column>
<el-table-column prop="stock" label="库存"></el-table-column>
<el-table-column label="操作">
<template slot-scope="scope">
<el-button type="primary" size="mini" @click="handleEdit(scope.$index, scope.row)">编辑</el-button>
<el-button type="danger" size="mini" @click="handleDelete(scope.$index, scope.row)">删除</el-button>
</template>
</el-table-column>
</el-table>
</div>
</template>
<script>
export default {
data() {
return {
dialogVisible: false,
newProduct: {
name: '',
price: '',
stock: ''
},
products: [
{ id: 1, name: '商品A', price: 100, stock: 10 },
{ id: 2, name: '商品B', price: 200, stock: 20 },
{ id: 3, name: '商品C', price: 300, stock: 30 }
]
};
},
methods: {
handleAdd() {
this.products.push({
id: this.products.length + 1,
name: this.newProduct.name,
price: this.newProduct.price,
stock: this.newProduct.stock
});
this.dialogVisible = false;
this.newProduct = { name: '', price: '', stock: '' };
},
handleEdit(index, row) {
console.log('编辑商品', index, row);
},
handleDelete(index, row) {
console.log('删除商品', index, row);
}
}
};
</script>
为了确保用户输入的数据有效,我们可以使用Element UI的表单验证功能。
<!-- src/components/ProductList.vue -->
<template>
<div>
<el-button type="primary" @click="dialogVisible = true">添加商品</el-button>
<el-dialog title="添加商品" :visible.sync="dialogVisible" width="30%">
<el-form :model="newProduct" :rules="rules" ref="newProductForm" label-width="80px">
<el-form-item label="商品名称" prop="name">
<el-input v-model="newProduct.name"></el-input>
</el-form-item>
<el-form-item label="价格" prop="price">
<el-input v-model="newProduct.price"></el-input>
</el-form-item>
<el-form-item label="库存" prop="stock">
<el-input v-model="newProduct.stock"></el-input>
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button @click="dialogVisible = false">取 消</el-button>
<el-button type="primary" @click="handleAdd">确 定</el-button>
</span>
</el-dialog>
<el-table :data="products" style="width: 100%">
<el-table-column prop="name" label="商品名称"></el-table-column>
<el-table-column prop="price" label="价格"></el-table-column>
<el-table-column prop="stock" label="库存"></el-table-column>
<el-table-column label="操作">
<template slot-scope="scope">
<el-button type="primary" size="mini" @click="handleEdit(scope.$index, scope.row)">编辑</el-button>
<el-button type="danger" size="mini" @click="handleDelete(scope.$index, scope.row)">删除</el-button>
</template>
</el-table-column>
</el-table>
</div>
</template>
<script>
export default {
data() {
return {
dialogVisible: false,
newProduct: {
name: '',
price: '',
stock: ''
},
rules: {
name: [
{ required: true, message: '请输入商品名称', trigger: 'blur' }
],
price: [
{ required: true, message: '请输入价格', trigger: 'blur' },
{ type: 'number', message: '价格必须为数字值', trigger: 'blur', transform: (value) => Number(value) }
],
stock: [
{ required: true, message: '请输入库存', trigger: 'blur' },
{ type: 'number', message: '库存必须为数字值', trigger: 'blur', transform: (value) => Number(value) }
]
},
products: [
{ id: 1, name: '商品A', price: 100, stock: 10 },
{ id: 2, name: '商品B', price: 200, stock: 20 },
{ id: 3, name: '商品C', price: 300, stock: 30 }
]
};
},
methods: {
handleAdd() {
this.$refs.newProductForm.validate((valid) => {
if (valid) {
this.products.push({
id: this.products.length + 1,
name: this.newProduct.name,
price: Number(this.newProduct.price),
stock: Number(this.newProduct.stock)
});
this.dialogVisible = false;
this.newProduct = { name: '', price: '', stock: '' };
} else {
return false;
}
});
},
handleEdit(index, row) {
console.log('编辑商品', index, row);
},
handleDelete(index, row) {
console.log('删除商品', index, row);
}
}
};
</script>
接下来,我们将实现编辑商品的功能。我们将使用与添加商品类似的弹窗组件,并在点击编辑按钮时,将当前商品的数据填充到表单中。
在ProductList.vue
中添加一个编辑弹窗组件,并在点击编辑按钮时显示该弹窗。
<!-- src/components/ProductList.vue -->
<template>
<div>
<el-button type="primary" @click="dialogVisible = true">添加商品</el-button>
<el-dialog title="添加商品" :visible.sync="dialogVisible" width="30%">
<el-form :model="newProduct" :rules="rules" ref="newProductForm" label-width="80px">
<el-form-item label="商品名称" prop="name">
<el-input v-model="newProduct.name"></el-input>
</el-form-item>
<el-form-item label="价格" prop="price">
<el-input v-model="newProduct.price"></el-input>
</el-form-item>
<el-form-item label="库存" prop="stock">
<el-input v-model="newProduct.stock"></el-input>
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button @click="dialogVisible = false">取 消</el-button>
<el-button type="primary" @click="handleAdd">确 定</el-button>
</span>
</el-dialog>
<el-dialog title="编辑商品" :visible.sync="editDialogVisible" width="30%">
<el-form :model="currentProduct" :rules="rules" ref="editProductForm" label-width="80px">
<el-form-item label="商品名称" prop="name">
<el-input v-model="currentProduct.name"></el-input>
</el-form-item>
<el-form-item label="价格" prop="price">
<el-input v-model="currentProduct.price"></el-input>
</el-form-item>
<el-form-item label="库存" prop="stock">
<el-input v-model="currentProduct.stock"></el-input>
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button @click="editDialogVisible = false">取 消</el-button>
<el-button type="primary" @click="handleEditConfirm">确 定</el-button>
</span>
</el-dialog>
<el-table :data="products" style="width: 100%">
<el-table-column prop="name" label="商品名称"></el-table-column>
<el-table-column prop="price" label="价格"></el-table-column>
<el-table-column prop="stock" label="库存"></el-table-column>
<el-table-column label="操作">
<template slot-scope="scope">
<el-button type="primary" size="mini" @click="handleEdit(scope.$index, scope.row)">编辑</el-button>
<el-button type="danger" size="mini" @click="handleDelete(scope.$index, scope.row)">删除</el-button>
</template>
</el-table-column>
</el-table>
</div>
</template>
<script>
export default {
data() {
return {
dialogVisible: false,
editDialogVisible: false,
newProduct: {
name: '',
price: '',
stock: ''
},
currentProduct: {
id: '',
name: '',
price: '',
stock: ''
},
rules: {
name: [
{ required: true, message: '请输入商品名称', trigger: 'blur' }
],
price: [
{ required: true, message: '请输入价格', trigger: 'blur' },
{ type: 'number', message: '价格必须为数字值', trigger: 'blur', transform: (value) => Number(value) }
],
stock: [
{ required: true, message: '请输入库存', trigger: 'blur' },
{ type: 'number', message: '库存必须为数字值', trigger: 'blur', transform: (value) => Number(value) }
]
},
products: [
{ id: 1, name: '商品A', price: 100, stock: 10 },
{ id: 2, name: '商品B', price: 200, stock: 20 },
{ id: 3, name: '商品C', price: 300, stock: 30 }
]
};
},
methods: {
handleAdd() {
this.$refs.newProductForm.validate((valid) => {
if (valid) {
this.products.push({
id: this.products.length + 1,
name: this.newProduct.name,
price: Number(this.newProduct.price),
stock: Number(this.newProduct.stock)
});
this.dialogVisible = false;
this.newProduct = { name: '', price: '', stock: '' };
} else {
return false;
}
});
},
handleEdit(index, row) {
this.currentProduct = { ...row };
this.editDialogVisible = true;
},
handleEditConfirm() {
this.$refs.editProductForm.validate((valid) => {
if (valid) {
const index = this.products.findIndex(product => product.id === this.currentProduct.id);
if (index !== -1) {
this.products.splice(index, 1, {
id: this.currentProduct.id,
name: this.currentProduct.name,
price: Number(this.currentProduct.price),
stock: Number(this.currentProduct.stock)
});
}
this.editDialogVisible = false;
} else {
return false;
}
});
},
handleDelete(index, row) {
console.log('删除商品', index, row);
}
}
};
</script>
在handleEditConfirm
方法中,我们首先验证表单数据,然后找到当前商品在列表中的索引,并使用splice
方法更新商品数据。
最后,我们将实现删除商品的功能。我们将使用Element UI的el-message-box
组件来确认删除操作。
在`
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。