Angular 指令输入的动态 属性 绑定

Dynamic Property Binding for Angular Directive Inputs

您好,我正在制作一个拖动指令,但由于它的工作方式,我无法让它在动态对象上工作,因为它会调用输入中的 id。

@Input()
set Drag(options: any) {
   this.stickerElement = document.getElementById(options.id);
}

当元素不是动态时,它工作正常:

<div id="sticker" class="issues" [Drag]="{id: 'sticker'}">

但是当它被动态设置时,我不知道如何动态插入 ID。

<div [attr.id]="'Session' + Day.id" [Drag]="{id:'Session' + Day.id}"></div>

我已经尝试在您使用它时使用 @HostListener 设置 this.stickerElement,但这允许指令冒泡并使用子元素。我想我可以解决它,但 感觉 不对。

我觉得我缺少一些知识,因为无论我 google 什么都没有关于如何正确插入它的有用信息。你能像这样将属性插入到指令中吗?

提前致谢 B

我没有发现插值有任何问题。但是,Angular 中的 document.getElementById(options.id) 看起来很脏。相反,您可以使用 template reference variable 并直接发送 HTMLElement.

尝试以下方法

模板

<div appSticker #sticker [Drag]="{ref:sticker}"></div>

指令

@Directive({ selector: "[appSticker]" })
export class StickerDirective {
  stickerElement: HTMLElement;

  @Input()
  set Drag(options: any) {
    this.stickerElement = options.ref;
  }

  constructor() {}
}

此外,我在您的代码中的 <div> 标记中没有看到指令绑定。