我创建了 2 个 angular 5 组件,它们是一个对话框和一个下拉菜单。
我想在对话框中打开下拉组件,所以我为它创建了一个对话服务,它被注入到 app.component 中。app.component 中的代码如下-
import { TestComponent } from './test/test.component';
constructor(private dialog: DialogService){}
openDialog(){
this.dialog.open(TestComponent, {
modal: true
});
}
TestComponent 非常简单,它在 HTML 文件中有组件选择器,如下所示 -
<once-ui-dropdown
[options]="customLanguages"
[allowSearch]="true">
</once-ui-dropdown>
其中 customLanguages 是一系列选项。
DialogService 是一个简单的服务,它做两件事-
1)在body中添加一个对话框组件
这是代码片段-
DialogService.componentRef = this.componentFactoryResolver
.resolveComponentFactory(DialogComponent)
.create(this.injector);
this.appRef.attachView(DialogService.componentRef.hostView);
const domElem = (DialogService.componentRef.hostView as
EmbeddedViewRef<any>)
.rootNodes[0] as HTMLElement;
document.body.appendChild(domElem);
DialogService.componentRef.changeDetectorRef.detectChanges();
2:在对话框中打开/追加 TestComponent 到一个 div
const loadComponentRef = this.componentFactoryResolver
.resolveComponentFactory(content)
.create(this.injector);
loadComponentRef.changeDetectorRef.detectChanges();
const domElem = (loadComponentRef.hostView as EmbeddedViewRef<any>)
.rootNodes[0] as HTMLElement;
data = domElem.innerHTML;
document.getElementById('loadComponent').innerHTML = data;
最后一件事<once-ui-dropdown
是一个 Angular 5 组件,它具有一些功能,如 openDialog、changeOptions 等,它的 HTML 看起来像这样 -
<div class="dropholder" (click)="this.openDropdown()"
...
...
...
现在,问题是“我能够将数据/道具(选项数组)绑定到下拉组件,但没有调用诸如单击和更改之类的事件。动态加载的组件上的事件绑定似乎有些问题。” . 请帮忙!