使用 angular 5 中的指令激活省略号时如何激活工具提示?
How to activate tooltip when ellipsis is activated using a directive in angular 5?
我有以下模板,其中添加了 "dotdotdot" css class
正确溢出时的省略号。
<div class="dotdotdot">{{data.trip.name}}</div>
我在这里想做的是实现一个指令,当
省略号仅被激活。
这是指令的当前代码:
import { Directive, OnInit, ElementRef } from '@angular/core';
declare var $: any;
@Directive({
selector: '.dotdotdot'
})
export class DotdotdotDirective implements OnInit {
private el: HTMLElement;
constructor(elRef: ElementRef) {
this.el = elRef.nativeElement;
}
ngOnInit() {
if (this.isEllipsisActive(this.el)) {
// TODO add title attribute to the div with value from text
$(this.el).tooltip();
}
}
isEllipsisActive(e) {
return (e.offsetWidth < e.scrollWidth);
}
}
我上面的代码有两个问题:
- isEllipsisActive 不起作用,我需要识别省略号的方法。
- 我需要知道如何动态添加标题或 [title] 属性
从 $(this.el).该值是来自 div.
的文本
谢谢!
您可以创建此指令:
import { AfterViewInit, Directive, ElementRef, EventEmitter, Output } from
'@angular/core';
@Directive({
selector: '[isEllipsisActive]'
})
export class IsEllipsisActiveDirective implements AfterViewInit {
constructor(private elementRef: ElementRef) {}
ngAfterViewInit(): void {
setTimeout(() => {
const element = this.elementRef.nativeElement;
if(element.offsetWidth < element.scrollWidth){
element.title = element.innerHTML;
}
}, 500);
}
}
看看这个https://stackblitz.com/edit/angular-qjmg7m?file=src%2Fapp%2Fis-ellipsis-active.directive.ts
ofir 的出色回答 - 这是一个修改后的版本,如果文本在初始化后发生更改,该版本将起作用。
import { Directive, ElementRef, HostListener } from '@angular/core';
@Directive({
selector: '[isEllipsisActive]'
})
export class isEllipsisActiveDirective {
constructor(private elementRef: ElementRef) {}
@HostListener('mouseenter')
onMouseEnter(): void {
setTimeout(() => {
const element = this.elementRef.nativeElement;
if (element.offsetWidth < element.scrollWidth) {
element.title = element.textContent;
}
else if (element.title) element.removeAttribute('title');
}, 500);
}
}
您可以使用 disableTooltip 属性,并为 return 创建一个函数来决定是否禁用。
isEllipsisActive(e: HTMLElement): boolean {
return e ? (e.offsetWidth < e.scrollWidth) : false;
}
<mat-card>
<mat-card-title #galleryTitle [matTooltip]="gallery.name"
[matTooltipDisabled]="!isEllipsisActive(galleryTitle)">
{{gallery.name}}
</mat-card-title>
<mat-card>
我有以下模板,其中添加了 "dotdotdot" css class 正确溢出时的省略号。
<div class="dotdotdot">{{data.trip.name}}</div>
我在这里想做的是实现一个指令,当 省略号仅被激活。
这是指令的当前代码:
import { Directive, OnInit, ElementRef } from '@angular/core';
declare var $: any;
@Directive({
selector: '.dotdotdot'
})
export class DotdotdotDirective implements OnInit {
private el: HTMLElement;
constructor(elRef: ElementRef) {
this.el = elRef.nativeElement;
}
ngOnInit() {
if (this.isEllipsisActive(this.el)) {
// TODO add title attribute to the div with value from text
$(this.el).tooltip();
}
}
isEllipsisActive(e) {
return (e.offsetWidth < e.scrollWidth);
}
}
我上面的代码有两个问题:
- isEllipsisActive 不起作用,我需要识别省略号的方法。
- 我需要知道如何动态添加标题或 [title] 属性 从 $(this.el).该值是来自 div. 的文本
谢谢!
您可以创建此指令:
import { AfterViewInit, Directive, ElementRef, EventEmitter, Output } from
'@angular/core';
@Directive({
selector: '[isEllipsisActive]'
})
export class IsEllipsisActiveDirective implements AfterViewInit {
constructor(private elementRef: ElementRef) {}
ngAfterViewInit(): void {
setTimeout(() => {
const element = this.elementRef.nativeElement;
if(element.offsetWidth < element.scrollWidth){
element.title = element.innerHTML;
}
}, 500);
}
}
看看这个https://stackblitz.com/edit/angular-qjmg7m?file=src%2Fapp%2Fis-ellipsis-active.directive.ts
ofir 的出色回答 - 这是一个修改后的版本,如果文本在初始化后发生更改,该版本将起作用。
import { Directive, ElementRef, HostListener } from '@angular/core';
@Directive({
selector: '[isEllipsisActive]'
})
export class isEllipsisActiveDirective {
constructor(private elementRef: ElementRef) {}
@HostListener('mouseenter')
onMouseEnter(): void {
setTimeout(() => {
const element = this.elementRef.nativeElement;
if (element.offsetWidth < element.scrollWidth) {
element.title = element.textContent;
}
else if (element.title) element.removeAttribute('title');
}, 500);
}
}
您可以使用 disableTooltip 属性,并为 return 创建一个函数来决定是否禁用。
isEllipsisActive(e: HTMLElement): boolean {
return e ? (e.offsetWidth < e.scrollWidth) : false;
}
<mat-card>
<mat-card-title #galleryTitle [matTooltip]="gallery.name"
[matTooltipDisabled]="!isEllipsisActive(galleryTitle)">
{{gallery.name}}
</mat-card-title>
<mat-card>