angular - 是否可以从组件/指令中修改 ng-content
问题描述
<ng-content>
是否可以从组件或指令中附加到?
我目前正在尝试设置一个管道,该管道允许指令将文本节点附加到转入内容的开头。
<some-component appendContent="text to append">
<div class="initial-content">test</div>
</some-component>
@Component({
selector: 'some-component',
template: `
<div class="container">
<ng-content></ng-content>
</div>
`
})
export class SomeComponent {
}
@Directive({
selector: '[appendContent]'
})
export class AppendContentDirective {
@Input('appendContent') content: string;
}
我知道这ContentChildren
允许我查询 中的内容ng-content
,但我找不到任何有关附加元素以给出以下结果的方式的信息。
<div class="container">
<div class="initial-content">test</div>
<div class="appended-content">text to append</div>
</div>
堆栈闪电战: https ://stackblitz.com/edit/angular-cjquyz
您会注意到上面的 stackblitz 会生成:
<div class="appended-content">text to append</div>z
<div class="container">
<div class="initial-content">test</div>
</div>
解决方案
要附加一个 div,您可以使用 render2(而不是 insertAdjacentElement)。renderer.appendChild 需要一个元素引用,不使用 this.elementRef.nativeElement 否则 this.elementRef.nativeElement.firstChild
ngOnInit() {
const contentElement = this.renderer.createElement('div');
contentElement.classList.add('appended-content');
contentElement.textContent = this.content;
this.renderer.appendChild(this.elementRef.nativeElement.lastChild,contentElement)
}
推荐阅读
- laravel - 我如何访问集合实例
- android - 向 android 中的特定受众发送推送通知
- html - 导航栏切换器无法正常工作
- c# - WPF。如何列出 4 个不同标签中的 4 个最佳组合
- asynchronous - 动作创建者中的循环:“动作必须是普通对象。使用自定义中间件进行异步动作”
- javascript - PM2 是否打算在开发过程中使用?
- android-studio - ANDROID STUDIO 中的错误:无法解析符号 R
- php - 我如何在几天的某个时间间隔内检索数据
- javascript - jQuery未定义变量markercluster
- size - 什么是 Avro 数据大小限制?