angular - 打字稿中另一个组件的引用 html
angular - reference html of another component from typescript
我正在我的 angular 项目中实施 mapQuest。地图工作正常,也显示弹出窗口,但我在访问另一个组件 HTML 文件时遇到问题。我设法稍微解决了它,但我认为这不是正确的解决方案。
在弹出窗口中,我想显示另一个我有 table 的组件。我还需要提供意见。
示例:
Parent html:
<div id="map" style="height: -webkit-fill-available; width: -webkit-fill-available;">
</div>
<app-basicInfo [input]="testInput"></app-basicInfo>
这个 app-basicInfo 不应该在 HTML 文件中。目前,如果我删除它,那么它的弹出窗口将不起作用。
Parent typescript - 问题:我想在 bindPopup 上显示 child 组件。
L.marker([35.7392, -104.9903], {
icon: L.mapquest.icons.marker(),
draggable: false
}).bindPopup(this.child.getHtmlContent()).addTo(this.map); <-- here
我的一般问题是如何实现这样的目标:
bindPopup( "<app-basicInfo [input]="testInput"></app-basicInfo>" )
Child:
<app-table style="width: 100%;" [dataSource]="dataSource" [displayedColumns]="displayedColumns">
<ng-content></ng-content>
</app-table>
Child 技术人员:
constructor(elRef: ElementRef) {
this.elRef = elRef;
}
getHtmlContent() {
return this.elRef.nativeElement.innerHTML;
}
我找不到答案,我已经阅读了很多文档。我什至希望能参考一些解决了类似问题的文件。
我在 MapQuest 的开发团队工作。您能否 post 更多代码,或者 link 到 GitHub 存储库,我可以在那里测试它?这将极大地帮助我为您尝试一些修复。
同时,试一试(参考自here)-
L.marker([35.7392, -104.9903], {
icon: L.mapquest.icons.marker(),
draggable: false
}).bindPopup( "<app-basicInfo [input]="testInput"></app-basicInfo>" ).openPopup()
我确定您可能已经尝试过这个或类似的东西,只是想为您寻找一些可能简单的解决方案,直到我对代码有更多的了解。
基于https://github.com/Asymmetrik/ngx-leaflet/issues/178我设法解决了。
首先我安装了angular/elements。
将此添加到我的 sharedModule:
export class SharedModuleModule {
constructor(private injector: Injector) {
const PopupElement = createCustomElement(BasicInfoComponent, {injector});
// Register the custom element with the browser.
customElements.define('popup-element', PopupElement);
}
}
并实现了标记调用我的基本信息组件:
L.marker([35.7392, -104.9903], {
icon: L.mapquest.icons.marker(),
draggable: false
}).addTo(this.map).bindPopup(fl => {
const popupEl: NgElement & WithProperties<BasicInfoComponent> = document.createElement('popup-element') as any;
popupEl.message="test";
popupEl.addEventListener('closed', () => document.body.removeChild(popupEl));
document.body.appendChild(popupEl);
return popupEl;
})
我正在我的 angular 项目中实施 mapQuest。地图工作正常,也显示弹出窗口,但我在访问另一个组件 HTML 文件时遇到问题。我设法稍微解决了它,但我认为这不是正确的解决方案。
在弹出窗口中,我想显示另一个我有 table 的组件。我还需要提供意见。
示例:
Parent html:
<div id="map" style="height: -webkit-fill-available; width: -webkit-fill-available;">
</div>
<app-basicInfo [input]="testInput"></app-basicInfo>
这个 app-basicInfo 不应该在 HTML 文件中。目前,如果我删除它,那么它的弹出窗口将不起作用。
Parent typescript - 问题:我想在 bindPopup 上显示 child 组件。
L.marker([35.7392, -104.9903], {
icon: L.mapquest.icons.marker(),
draggable: false
}).bindPopup(this.child.getHtmlContent()).addTo(this.map); <-- here
我的一般问题是如何实现这样的目标:
bindPopup( "<app-basicInfo [input]="testInput"></app-basicInfo>" )
Child:
<app-table style="width: 100%;" [dataSource]="dataSource" [displayedColumns]="displayedColumns">
<ng-content></ng-content>
</app-table>
Child 技术人员:
constructor(elRef: ElementRef) {
this.elRef = elRef;
}
getHtmlContent() {
return this.elRef.nativeElement.innerHTML;
}
我找不到答案,我已经阅读了很多文档。我什至希望能参考一些解决了类似问题的文件。
我在 MapQuest 的开发团队工作。您能否 post 更多代码,或者 link 到 GitHub 存储库,我可以在那里测试它?这将极大地帮助我为您尝试一些修复。
同时,试一试(参考自here)-
L.marker([35.7392, -104.9903], {
icon: L.mapquest.icons.marker(),
draggable: false
}).bindPopup( "<app-basicInfo [input]="testInput"></app-basicInfo>" ).openPopup()
我确定您可能已经尝试过这个或类似的东西,只是想为您寻找一些可能简单的解决方案,直到我对代码有更多的了解。
基于https://github.com/Asymmetrik/ngx-leaflet/issues/178我设法解决了。
首先我安装了angular/elements。
将此添加到我的 sharedModule:
export class SharedModuleModule {
constructor(private injector: Injector) {
const PopupElement = createCustomElement(BasicInfoComponent, {injector});
// Register the custom element with the browser.
customElements.define('popup-element', PopupElement);
}
}
并实现了标记调用我的基本信息组件:
L.marker([35.7392, -104.9903], {
icon: L.mapquest.icons.marker(),
draggable: false
}).addTo(this.map).bindPopup(fl => {
const popupEl: NgElement & WithProperties<BasicInfoComponent> = document.createElement('popup-element') as any;
popupEl.message="test";
popupEl.addEventListener('closed', () => document.body.removeChild(popupEl));
document.body.appendChild(popupEl);
return popupEl;
})