首先,在watch里监听table绑定的data:
data(valArr) {
const _this = this
this.formThead = this.formThead.map(function (value) {
const arr = valArr.map((x) => x[value.code])
arr.push(value.name)
value.width = _this.getMaxLength(arr) + 20
return value
})
}
计算每列最大宽度:
getMaxLength(arr) {
String.prototype.pxWidth = function (font) {
var canvas = String.prototype.pxWidth.canvas || (String.prototype.pxWidth.canvas = document.createElement('canvas')),
context = canvas.getContext('2d')
font && (context.font = font)
var metrics = context.measureText(this)
return metrics.width
}
return arr.reduce((acc, item) => {
if (item) {
const calcLen = (item + '').pxWidth('bold 12pt arial')
if (acc < calcLen) {
acc = calcLen
}
}
return acc
}, 0)
},