【发布时间】:2021-02-20 07:29:21
【问题描述】:
组件是否可以接收在开始标签和结束标签之间传递给它的内容,并将输入直接分配给接收模板内的innerHTML?
我有一个这样的string 输入:
public content: string =
'<div class="row">' +
' <div class="col">' +
' <h1>Friendly greetings!</h1>' +
' <p>' +
' This is my homepage..' +
' </p>' +
' </div>' +
'</div>';
并像这样把它放在我的组件中:
<app-content>{{ content }}</app-content>
在app-content里面我可以在模板中使用ng-content来投影输入的内容。由于输入是string,我只能看到string,它所描述的HTML 元素不会被渲染。
我尝试注入 ElementRef 并通过 this.elementRef.nativeElement.textContent 访问文本节点,但必须先呈现内容才能以这种方式访问它。
当然,我可以像这样隐藏ng-content 生成的内容:
<div style="display: none">
<ng-content></ng-content>
</div>
然后在变量中获取textContent(例如content)并设置如下:
<div [outerHTML]="content"></div>
但这对我来说似乎很老套。
StackBlitz 项目:get-input-of-ng-content-directly
我错过了什么吗?
我想在模板中做这样的事情:<div [outerHTML]="incoming ng-content stuff"></div>
或者至少在组件构造函数中注入内容并将其设置为变量,但不先渲染内容只是为了隐藏它。
【问题讨论】:
-
我认为这是可能的,但是...为什么不将字符串(我猜是来自服务器的)传递给
app-content中的@Input()? -
又不想在父组件中做
<app-content><div [outerHTML]="content"></div></app-content>? -
我对这个用例特别感兴趣,因为我想使用精益元素。没有额外的属性,没有辅助构造,只有标签之间的内容,然后直接访问它......没有上面描述的黑客。这似乎不像我想象的那样可能,但它绝对应该是。
-
@julianobrasil 你能详细说明这怎么可能吗?
-
Johannes,这与下面@tlm 的回答方向相同。除了那个答案,我只是绕过一些 Angular 的消毒剂,否则你将无法插入样式、类等以及传入的 HTML。
标签: html angular innerhtml ng-content