Angular 2 如何相对于另一个元素定位一个元素

标签 angular

在 Angular 2 中,我需要相对于另一个元素绝对定位一个元素。在 jQuery 中,这可以使用 jQueryUI .position() https://api.jqueryui.com/1.8/position/ 来完成。

我试图创建一个 Angular 2 指令,但找不到一种方法来引用目标元素(可能位于页面上的任何位置)以获取顶部/左侧/宽度/高度值。

此外,我的理解是在 Angular 2 中应避免 DOM 操作。是否可以在不使用 nativeElement 的情况下实现此位置功能?

目标是能够在帮助/提示文本可以位于元素顶部的任何页面顶部创建叠加层。请注意,该页面是响应式的。这是预期效果的示例。

help overlay

最佳答案

我将其添加为一个单独的答案,因为它与原始答案做了一些不同的事情,我认为两者都可能对将来看到这个的人有用。

this plunker 的随意状态表示歉意,@Aydus-Matthew。它有点被扔在一起。

这个的关键部分是我创建了一个可注入(inject)的 overlay 类,可以在我们想要打开/关闭覆盖的任何地方使用,或者需要检查覆盖的状态应用程序。

这允许我们在工具提示上使用 [class.my-class] 属性样式来添加条件样式以显示工具提示。

@Injectable()
export class Overlay {
  public IsVisible: boolean = false;
  
  public Toggle(): void {
    this.IsVisible = !this.IsVisible;
  }
}

然后像这样在工具提示组件中使用它:

import { Overlay } from './overlay';

@Component({
  selector: 'my-tooltip',
  template: `<span [class.visible]="overlay.IsVisible">{{ Message }}</span>`,
  styles: ['span { position: absolute; display: none; color: white; font-weight: bold } .visible { display: block } '],
})
export class Tooltip {
  @Input()
  public Message: string = "";
  
  constructor (private overlay: Overlay) {  }
}

希望这可以帮助您获得解决问题所需的正确实现:)

关于Angular 2 如何相对于另一个元素定位一个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42699637/

相关文章:

javascript - 删除 ngFor 中的前 4 个字符

angular - 如何在包含 RouterOutlet 的 HTML 模板中直接使用激活路由的数据?

angular - 显示错误并恢复流

angular - 使用 angular2 配置 Hammerjs 事件

css - 用引号包裹的 Angular 函数返回变量显示为文本而不是渲染/使用不破坏 css 的不同方案

javascript - 指令在应用程序中不起作用

angular - 如何将服务注入(inject)异步验证器?

Angular 拦截器-不能将 'Observable<unknown>'类型分配给 'Observable<HttpEvent<any>>'类型

javascript - 带有重定向的 Angular 2 AuthGuard 服务?

angular - 为什么Angular 11和Electron会产生没有内容的窗口