angular - Angular Pipe 在文本不完全可见时显示工具提示
问题描述
如果文本未完全显示在视图中,我想显示工具提示。
我尝试了两种方法
- 我写了一个函数来计算 scrollWidth 和 clientWidth 并有条件地显示工具提示。[运作良好]。
- 我在管道中写了类似的逻辑(不工作)
<br><br><br><br>
<!-- It is working well with function getToolTip -->
<div class="text-limit-10rem" #firstDiv [ngbTooltip]="getToolTip(longMessage, firstDiv)">
{{longMessage}}
</div>
<br><br><br>
<div class="text-limit-10rem" #secondDiv [ngbTooltip]="getToolTip(shortMessage, secondDiv)">
{{shortMessage}}
</div>
<br><br><br>
<!-- It's not working when I'm using pipe -->
<div class="text-limit-10rem color-red" #thirdDiv [ngbTooltip]="longMessage | widthPipe: thirdDiv">
{{longMessage}}
</div>
<br><br><br>
<div class="text-limit-10rem color-red" #forthDiv [ngbTooltip]="shortMessage | widthPipe: forthDiv">
{{shortMessage}}
</div>
getToolTip(strVal, element: Element){
if(element.scrollWidth > element.clientWidth){
console.log('From Method: Scroll Width ', element.scrollWidth, ' Client Width ',element.clientWidth);
return strVal;
}
else {
return ''
};
}
管道
import { Pipe, PipeTransform } from '@angular/core';
@Pipe({
name: 'widthPipe'
})
export class WidthPipe implements PipeTransform {
transform(strVal: string, elem: Element): string {
console.log('From Pipe Scroll Width ', elem.scrollWidth, ' Client Width ',elem.clientWidth);
if (elem.scrollWidth > elem.clientWidth) {
return strVal && strVal.trim().length > 0 ? strVal : '';
} else {
return '';
}
}
}
.text-limit-10rem {
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
max-width: 10rem;
background-color: YELLOW;
}
如果有人知道仅在文本不完全可见时显示工具提示的更好方法,请发表评论。
解决方案
不管它是否是最佳实践。您的管道无法正常工作的原因是因为内部定义的方法不是“纯”的。这意味着,管道中的相同输入不会产生相同的输出,因为它依赖于外部对象。本例中的窗口对象。
您可以使用以下方法解决此问题pure: false
:
@Pipe({
name: 'widthPipe',
pure: false
})
export class WidthPipe implements PipeTransform {
//...
}
但是,最好为此创建一个单独的组件或指令,以便您可以监听窗口调整大小以重新计算。不纯的管道通常是性能问题
推荐阅读
- express - 我想从数据库中删除一个帖子(数据)并得到这个错误`Uncaught ReferenceError: $ is not defined`
- spring-mvc - Spring组件扫描错误(schema_reference.4:无法读取架构文档'https://www.springframework.org/schema/beans/spring-beans-4.3.xsd')
- pandas - 无法仅检索使用熊猫从列中提取值时遇到的第一个值
- java - 如何在 Spring boot restful api 和 Flask restful api 之间创建通信?
- ios - React Native Expo Ejected App,无法从设备获取推送令牌
- javascript - Vue refs 存在但 refs[key] 未定义
- spring-boot - 我如何更改 Zuul API 网关的读取超时
- vue.js - 为什么我导入的 VueJS 组件不显示?
- java - 如何通过 Java 使用 Selenium 点击元素
- openstack - 禁用在 OVH OpenStack 对象存储中列出对象的功能