javascript - 如何从 Angular 组件中的变量显示 HTMLElement?
问题描述
我将动态生成HTMLElement
的存储在组件类的变量中。我想展示它,但我不知道这怎么可能。我试过这样:
在组件类内部:
elem: HTMLElement;
在模板中:
<ng-container *ngTemplateOutlet="elem"></ng-container>
我收到此错误:
TypeError: templateRef.createEmbeddedView is not a function
解决方案
如果你有一个裸机HTMLElement
,那么 Angular-y 就无能为力了。NgTemplateOutlet
期望 a TemplateRef
,而不是 vanilaHTMLElement
对象。
要将 HTML 元素插入 DOM,只需使用适当的 DOM 方法即可。您将使用哪一个完全取决于您要使用它的地方。
例如,你可以做
const wrapper = document.querySelector('div.wrapper')
wrapper.append(el) // pass in your element
您还可以通过在要选择的元素的模板中添加 Angular 引用,以更 Angular 的方式获取对包装器的引用,
<div class="wrapper" #wrapper></div>
ViewChild
并在您希望Angular分配给的属性上使用装饰器ElementRef
。
@ViewChild('wrapper', { static: true, read: ElementRef })
public wrapperElRef: ElementRef<HTMLDivElement>
一旦视图被初始化(当发生这种情况时,您会通过ngAfterViewInit
钩子收到通知),您可以通过访问 `.nativeElement 来获取其中的 HTML 元素:
this.wrapperElRef.nativeElement //: HTMLDivElement
你现在可以做
this.wrapperElRef.nativeElement.append(elem)
也就是说,除非您知道自己在做什么(通常包装现有库或与您还不能完全重构的现有大型系统集成)
推荐阅读
- sql-server - SQL Server - sp_OAGetProperty 不返回任何内容
- uwp - 是否可以将 UWP 应用程序投射到另一个显示器(如屏幕投射)?
- python - 通过在numpy中均匀间距选择相同长度的子数组
- jquery - jQuery AJAX | 如何循环json数据?
- mongodb - 在mongo中查找数组字段的最大值
- c - 嵌入式 Linux:从串行端口读取字节太慢,无法快速传输
- c# - .NET Nancy 2 引导程序未触发
- json - 如何使用 Apache Spark Java 解压缩 Gzipped
- html - 如何防止弹出窗口在css中消失?
- java - 如何从我选择的组合框中获取数据