【发布时间】:2021-11-04 16:24:23
【问题描述】:
我在 Contentful 中有一个富文本元素,其中包含一个嵌入条目。我正在尝试将该嵌入式条目呈现在自定义 Angular 组件中。但是,当我将选项传递给 Contentful documentToHtmlString 函数时,它会显示标记,但不会呈现任何内容,甚至不会触发我在自定义组件打字稿文件中拥有的 console.log() 函数。
用于渲染的TYPESCRIPT
convertToHTML(document:any[]) {
const options = {
renderNode: {
[BLOCKS.EMBEDDED_ENTRY]: (node:any, next:any) => `<embed-element [node]="${node}" [content]="${next(node.content)}"></embed-element>`
}
}
let unsafe = documentToHtmlString(document, options);
return this.sanitizer.bypassSecurityTrustHtml(unsafe);
}
用于渲染的 HTML
<span [innerHTML]="convertToHTML(article.fields.content)"></span>
我还在app.module.ts 文件的提供程序部分中加载了自定义元素<embed-element></embed-element>。
import { EmbedElementComponent } from './shared/components/embed-element/embed-element.component';
@NgModule({
declarations: [
...
EmbedElementComponent
],
providers: [
...
EmbedElementComponent
]
})
然后在自定义元素的 typescript 文件中,我只是在 onInit 函数中有一个 console.log 用于测试目的。我没有在控制台中看到这种情况。
import { Component, OnInit, Input } from '@angular/core';
@Component({
selector: 'embed-element',
templateUrl: './embed-element.component.html',
styleUrls: ['./embed-element.component.css']
})
export class EmbedElementComponent implements OnInit {
@Input() node: any;
@Input() content: any;
constructor() { }
ngOnInit(): void {
console.log(this.node);
}
}
在自定义元素的 HTML 中,我删除了 <p> 标记,以防它被剥离为“不安全”,并将其替换为以下内容:
EMBEDDED ELEMENT WORKS!!!!!
最后,当一切都被渲染后,我看到这个自定义元素的屏幕上什么也没有出现。然而,在检查元素内部,这就是我得到的。
<embed-element [node]="[object Object]" [content]=""></embed-element>
我如何设法让自定义元素在这方面真正被调用?并且至少收到我在自定义元素中请求的控制台日志消息?
【问题讨论】:
标签: javascript html angular typescript contentful