c语言 读取逗号分隔的字符串_用字符串在VUE中实现多选标签功能

我们经常可对数据对象用标签进行标记,以便实现精准分析推荐,主要有两种方式实现标签,一种是用另一个数据表,通过1对N关系,实现标签。这种实现方法比较复杂,对于后台功能处理要求多的可以用这种方法。对于有些标签,处理比较简单,可以用字符串保存标签的数组字符,使用时转换为数组,更新时转换为后台字符串,实现方法如下:

一、数据库字段设计

后台数据库用一个相对比较长的字符,Varchar(255)来保存选中的标签,采用“,”逗号进行分隔开,后台保存标签的代码。标签是利用通用数据字典进行定义。

二、定义标签字据字典

用通用的字典增加标签定义,这里标签只是用的数字,也可用字符。

2f8912fa7465cf5378a48c5bc17c83f2.png

三、读取与存储存数据转换

在VUE前端,标签输入是采用多选框,多选框传递给后台的是数组,因此必须在读取数据和保存数据时,必须进行转换。读取时,将字符用split分隔为数组,保存时用tostring转换为字符。

//  1、编辑时,多选标签输入实现          //2、组件构建时,将所有标签清单读出来备用    created() {      this.getList()      this.getDicts('scenic_file_label').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['form'].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('修改成功')                }              }//5、清单显示时,将代码转换为字符         // 文件标签字典状态字典翻译      fileLabelFormat(row, column) {        let labelStr = ''        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)      },

四、小结

用这个方法,后端少一个表,处理逻辑与编程要少很多,前端只增加少量代码。缺点是,后续做统计分析会不方便,后台如要做大量统计与分析,以及逻辑判断,还是需要分表实现。效果如下:

75273bea3d97170ee03e7473919513bd.png