背景说明:
从后端获取到一个文件,需要前端对拿到的json数据进行处理。
因为后端不可能把所有数据都详细说明传过来,而其他类似于需要改数据内容等,当数据量初具规模,前端拿到数据再修改是比后端修改方便很多的。
比如,文件权限,后台以“0” 和 “1”的形式标记,分别对应“权限文件”和“普通文件”;检索文件类型并标记,txt – “文本文件”,rar – “压缩文件” …等等。
此处例子(需求):
1.根据文件名后缀,区分文件类型
2.根据文件权限标注(0,1),标注文件权限
先上代码:
data(){ //data中先定义好对应替换的文本
return{
fileOption : [ //用于区分文件类型
{label: "txt", name: "文本文件"},
{label: "rar", name: "压缩文件"},
{label: "doc", name: "word文件"},
{label: "pdf", name: "pdf文件"},
{label: "xls", name: "excel文件"},
{label: "", name: "未知文件类型"},
],
fileorder:[ //用于标注文件权限
{label:"0",name:"权限文件"},
{label:"1",name:"普通文件"}
],
}
},
methods: { //点击调用函数后开始处理数据
showfile(){
this.isshow=!this.isshow //显示,和数据处理没关系
this.$axios.get('http://sbxbd.cpdd.vip/v1/upload/file') //从后端获取数据
.then(res=>{
console.log('查询:',res) //查看数据
this.tableData=res.data.msg //取出有用的数据
// console.log('this.tableData',this.tableData)
this.tableData.map(item=>{ //item是tableData中的每一条元素
item.fileType=this.fileOption.find(v=>{ //将需要匹配替换的元素遍历查找
if(v.label==item.fileType){
return v.name //返回的其实还是v,一个object对象
}
})
item.fileGrade=this.fileorder.find(v=>{
if(v.label==item.fileGrade){
return v.name
}
})
item.fileType=item.fileType ? item.fileType.name : "" //赋正确的值
item.fileGrade=item.fileGrade ? item.fileGrade.name : ""
})
})
},
}
思路说明
(能看懂代码就不用看这块了,代码更好懂)
1.从后端获取数据$axios.get()
2.查看后端返回的数据,确定需要修改的数据体,在data中定义转换的对应数据
{label: "txt", name: "文本文件"},
这种。
一一对应,稍后用label查询,对上了就把name返回过去(修改内容)
3.用map函数遍历查找,用find函数在已有的数据中查找对应,若匹配上,则把需要修改的值(name)返回。
这边其实就还是json格式的,简而言之,就是 查找匹配-- 返回确定。
4.这边插一句,我的数据显示是用prop传值的,所以修改后直接返回就行了
<el-table-column
prop="fileType"
label="文件类型"
width="80"
align="center"
>