一、固定列宽,文本过长用省略号‘...’显示
方案:使用css实现(本例在angular环境)
:host ::ng-deep { .ant-table-small > .ant-table-content > .ant-table-body > table > .ant-table-tbody > tr > td { max-width: 100px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } }
注意:如果表格行使用了nzWidth属性,则css需要设置最大宽度(实际上页面宽度会以nzWidth为准),否则html宽度无效。
二、根据字数长度截取:使用了angular的管道实现
import { Pipe, PipeTransform } from ‘@angular/core‘;
@Pipe({
name: ‘stringCutOff‘
})
export class StringCutOffPipe implements PipeTransform {
transform(value: any, args?: any): any {
let newStr = value;
//默认字符串长度
let defaultLength = 12;
//计算字符长度
let strEnLen = 0;
let strCnLen = 0;
//设置字符串截取长度,如果没有传参,就给默认长度defaultLength,用户输入参数按照中文字符计算,即2个字符。
//截取长度转换成字符
let strLength = args ? args * 2 : defaultLength * 2;
let cutIndex = 0;
for (let i = 0; i < value.length; i++) {
if (value.charCodeAt(i) <= 255) { //如果是汉字,则字符串长度加2
strEnLen++;
} else {
strCnLen += 2
}
//一个一个字符循环判断当前长度是否达到了截取长度,然后计算这段字符串中,中文字符和其他字符的数量
if ((strEnLen + strCnLen) >= strLength) {
cutIndex = i;
break;
}
}
if (value && strEnLen + strCnLen >= strLength) {
newStr = value.substring(0, cutIndex) + ‘...‘
};
return newStr;
}
}
<td [title]="data.NAME" >{{data.NAME|stringCutOff:15}}</td>
注意:
(1)管道设置了默认截取长度和自定义长度。
(2)英文字符在这里设为半个长度,因为考虑到设置字符长度的常规思维是以汉字为参考的。而英文、符号等字体宽度差不多是半个汉字,所以为了使相同截取数量的纯汉字和中英文混合字段表现相同宽度,把字符设为半个长度处理。
(3)html中使用时,一定要加上title,不然无法查看被截取文本的完整信息。
原文:https://www.cnblogs.com/gouzei/p/12837961.html