您好,我有以下服务,我想使用它来动态追加组件。
我正在构建一个聊天应用程序,其中消息组件是动态添加的。
import {
Injectable,
Injector,
ComponentFactoryResolver,
EmbeddedViewRef,
ApplicationRef
} from '@angular/core';
@Injectable()
export class DomService {
constructor(
private componentFactoryResolver: ComponentFactoryResolver,
private appRef: ApplicationRef,
private injector: Injector
) { }
appendComponentToBody(component: any) {
// 1. Create a component reference from the component
const componentRef = this.componentFactoryResolver
.resolveComponentFactory(component)
.create(this.injector);
// 2. Attach component to the appRef so that it's inside the ng component tree
this.appRef.attachView(componentRef.hostView);
// 3. Get DOM element from component
const domElem = (componentRef.hostView as EmbeddedViewRef<any>)
.rootNodes[0] as HTMLElement;
// 4. Append DOM element to the body
document.body.appendChild(domElem);
// 5. Wait some time and remove it from the component tree and from the DOM
setTimeout(() => {
this.appRef.detachView(componentRef.hostView);
componentRef.destroy();
}, 3000);
}
}有没有人可以教我如何使用这项服务?
假设我有一个消息组件,如何将该组件传递给该服务?
发布于 2019-10-10 20:28:38
假设您有一个要呈现的组件
@Component(...)
export class MyComponent {
}您应该将其作为entryComponent提供给模块
@NgModule({
declarations: [MyComponent],
entryComponents: [MyComponent]
})
export class SomeModule {
}然后从任何你能呼叫的地方
class Anything {
constructor(private domService: DomService){}
doRender(){ this.domService.appendComponentToBody(MyComponent);}
}https://stackoverflow.com/questions/58322365
复制相似问题