gpt4 book ai didi

angular - 结构指令、位置工具提示

转载 作者:行者123 更新时间:2023-12-02 16:09:59 25 4
gpt4 key购买 nike

我创建了一个结构指令,当我将鼠标悬停在文本“see tooltip”上时,该指令会根据 ng-template 内的内容显示工具提示工具提示显示正确,但它显示在屏幕的 top: 0px left: 0px 位置,我希望它显示在文本“see tooltip”的正上方,我已经用方法“实现了 elementRef 的尺寸” getBoundingClientRect()”,但我不知道如何在工具提示中应用它们。有什么想法吗?

工具提示.directive.ts

import { Component, Input, HostListener,  Directive, ElementRef, 
TemplateRef, ViewContainerRef, ContentChild, ComponentRef } from
'@angular/core';

@Directive({ selector: '[tooltipDirective]' })
export class TooltipDirective {
private tooltipId: string;
private dimensiones:{};
constructor(private elementRef: ElementRef,
private viewContainerRef: ViewContainerRef) { }

@Input() parametroPlantilla: TemplateRef<any>;
@ContentChild( "tooltipTemplate" ) private tooltipTemplateRef: TemplateRef
<Object>;
@HostListener('mouseenter') onMouseEnter(): void {
this.viewContainerRef.createEmbeddedView(this.tooltipTemplateRef);
this.dimensiones = this.elementRef.nativeElement.getBoundingClientRect();
}
@HostListener('mouseleave') onMouseLeave(): void {
if (this.viewContainerRef) {
this.viewContainerRef.clear();
}
}
}

显示.组件.ts

...Some stuff

<div tooltipDirective>See tooltip!
<ng-template #tooltipTemplate >
<div>
This is my tooltip!
</div>
</ng-template>
</div>

最佳答案

我将通过在主机元素内移动生成的工具提示来实现它,这样我将仅使用 css 规则来定义位置:

tooltip.directive.ts

@Directive({ selector: '[tooltipDirective]' })
export class TooltipDirective {
private tooltipId: string;

constructor(
private renderer: Renderer2,
private elementRef: ElementRef,
private viewContainerRef: ViewContainerRef) { }

@Input() parametroPlantilla: TemplateRef<any>;

@ContentChild( "tooltipTemplate" ) private tooltipTemplateRef: TemplateRef<Object>;

@HostListener('mouseenter') onMouseEnter(): void {
const view = this.viewContainerRef.createEmbeddedView(this.tooltipTemplateRef);
view.rootNodes.forEach(node =>
this.renderer.appendChild(this.elementRef.nativeElement, node));
}

@HostListener('mouseleave') onMouseLeave(): void {
if (this.viewContainerRef) {
this.viewContainerRef.clear();
}
}
}

html

<div tooltipDirective>See tooltip!
<ng-template #tooltipTemplate>
<div class="tooltip"> <================ add class
This is my tooltip!
</div>
</ng-template>
</div>

CSS

[tooltipDirective] {
position: relative;
}

.tooltip {
position: absolute;
bottom: 100%;
left: 0;
padding: 10px;
background: #fff;
box-shadow: 0 2px 1px rgba(0,0,0,.6);
}

<强> Stackblitz example

关于angular - 结构指令、位置工具提示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46867548/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com