angular - 如何通过自定义指令动态添加组件
问题描述
我想编写一个自定义指令,它将根据 div 内的一些逻辑动态添加组件,我在该 div 上使用了我的自定义指令。
我尝试使用 componentFactoryResolver 和 viewContainerRef.createComponent 动态添加组件
<div myDirective>
<!-- dynamically add component through directive -->
<span>Hello</span>
</div>
// my custom directive
myDirective {
constructor( private element: ElementRef,
private renderer: Renderer,
private viewContainerRef: ViewContainerRef,
private componentFactoryResolver: ComponentFactoryResolver
) { }
ngOnInit() {
let componentFactory = this.componentFactoryResolver
.resolveComponentFactory(myComponent);
let componentRef = this.viewContainerRef
.createComponent(componentFactory, 0);
}
}
实际结果:组件在 div 之后创建,预期:组件应添加到 div 内
解决方案
将动态创建的组件放置在宿主元素旁边是有历史原因的。
但是您可以通过将创建的元素移动到宿主元素中来更改此行为。
@Directive({
selector: '[myDirective]'
})
export class MyDirective {
constructor(private element: ElementRef,
private viewContainerRef: ViewContainerRef,
private componentFactoryResolver: ComponentFactoryResolver
) { }
ngOnInit() {
const componentFactory = this.componentFactoryResolver
.resolveComponentFactory(DynamicComponent);
const componentRef = this.viewContainerRef.createComponent(componentFactory);
const host = this.element.nativeElement;
host.insertBefore(componentRef.location.nativeElement, host.firstChild)
}
}
推荐阅读
- python - AttributeError:'CallbackContext'('Update')对象没有属性'message',python
- javascript - Rollup + React 17 与新的 JSX 转换 - “React 未定义”
- go - 使用通道作为队列的死锁
- powerbi - 我需要在 Power BI 中转换 excel countifs 公式
- python - Pandas numpy 处理 Nan
- arrays - 如何查看字符串是否在字符串数组中C
- next.js - Next JS Slug Page 赢得了 vercel 部署的工作
- python - 使用 pandas 数据框创建列表理解
- c++ - C++:在不使用锁的情况下比较 2 个整数变量时如何避免竞争条件
- asp.net - 以角度查询字符串加密并从asp.net解密