> 电脑数码
用字符串在vue中实现多选标签功能的方法(vue实现标签多选效果)
导语:用字符串在VUE中实现多选标签功能
我们经常可对数据对象用标签进行标记,以便实现精准分析推荐,主要有两种方式实现标签,一种是用另一个数据表,通过1对N关系,实现标签。这种实现方法比较复杂,对于后台功能处理要求多的可以用这种方法。对于有些标签,处理比较简单,可以用字符串保存标签的数组字符,使用时转换为数组,更新时转换为后台字符串,实现方法如下:
一、数据库字段设计后台数据库用一个相对比较长的字符,Varchar(255)来保存选中的标签,采用“,”逗号进行分隔开,后台保存标签的代码。标签是利用通用数据字典进行定义。
二、定义标签字据字典用通用的字典增加标签定义,这里标签只是用的数字,也可用字符。
三、读取与存储存数据转换在VUE前端,标签输入是采用多选框,多选框传递给后台的是数组,因此必须在读取数据和保存数据时,必须进行转换。读取时,将字符用split分隔为数组,保存时用tostring转换为字符。
// 1、编辑时,多选标签输入实现 <el-form-item label= prop=> <el-select v-model= multiple placeholder=> <el-option v-for= :key= :label= :value=> </el-option></el-select></el-form-item>//2、组件构建时,将所有标签清单读出来备用 created() { this.getList() this.getDicts(&39;).then(response => { this.fileLabelOptions = response.data }) }, //3、构建修改窗口时,将字符转为数组 handleUpdate(row) { this.reset() const id = row.id || this.ids //this.getTreeselect(); getScenicFile(id).then(response => { this.form = response.data this.form.label = this.form.label.split() } //4、数据保存提交时,转换字符 submitForm: function() { this.$refs[&39;].validate(valid => { if (valid) { if (this.form.id != undefined) { this.form.label = this.form.label.toString() updateScenicFile(this.form).then(response => { if (response.code === 200) { this.msgSuccess(&39;) } }//5、清单显示时,将代码转换为字符<el-table-column prop= label= :formatter = width=> </el-table-column> // 文件标签字典状态字典翻译 fileLabelFormat(row, column) { let labelStr = &39; if (row.label){ let tags = row.label.split() for (let i = 0; i < tags.length; i++){ labelStr = labelStr + this.selectDictLabel(this.fileLabelOptions,tags[i]) + } } return labelStr.substr(0,labelStr.length-1) },
四、小结用这个方法,后端少一个表,处理逻辑与编程要少很多,前端只增加少量代码。缺点是,后续做统计分析会不方便,后台如要做大量统计与分析,以及逻辑判断,还是需要分表实现。效果如下:
本文内容由快快网络小冰创作整理编辑!