gpt4 book ai didi

angular - 如何在 Angular 组件中创建 HtmlElement 引用?

转载 作者:行者123 更新时间:2023-12-04 10:57:53 25 4
gpt4 key购买 nike

我有一个组件 MyNodeComponent这需要一个 target HTML 元素作为 的一部分输入 我的对象 Angular 7.2.15 :

@Component({
selector: 'my-node',
templateUrl: './my-node.component.html'
})

export class MyNodeComponent implements OnInit, OnChanges, AfterViewInit {
@Input() inputObject: [{target: HTMLElement, desc: string}];
...
}

问题是我不确定如何以动态方式将 HTML DOM 节点发送到目标。尤其是在具有不同层次关系的页面上可能有多个 MyNode 实例:
<body>
<my-node [inputObject]="inputObjectDefinition"></my-node> <!-- target should refer to target1 -->

<p id="target1" #target1>Hello</p>

<div id="target2" #target2>
</div>
</body>

我将如何定义 inputObjectDefinition从 typescript 组件中包含对 target1 和 target2 的引用?我是否使用 document.getElementById(它一直返回 null,但我可能使用错误)?其他方式?

回答强制性的“你为什么要这样做?”问题实际上 MyNodeComponent 用于将 dom 节点发送到 html2Canvas 库,以便我可以将页面的一部分或部分呈现为图像。

最佳答案

看看 Angular 的 ElementRef ( https://angular.io/api/core/ElementRef )。这使您可以访问 DOM 中的 Element。

你可以在这里看到它的实际效果;
https://stackblitz.com/edit/angular-elementref-example

在你的情况下,你会;

@ViewChild("target1", {read: ElementRef, static: true}) target1ref: ElementRef; // gets #target1
@ViewChild("target2", {read: ElementRef, static: true}) target2ref: ElementRef; // gets #target2

ngAfterViewInit(): void {
console.log(this.target1ref.nativeElement);
console.log(this.target2ref.nativeElement);
}

如果你想动态地选择这些,你可以通过引用使用 ViewChildren 的指令来实现。

关于angular - 如何在 Angular 组件中创建 HtmlElement 引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59062387/

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