Angular 动态 youtube 弹出窗口的指令模板

Angular directive template for dynamic youtube popup

我想创建指令 youtube-video-popup.directive.html 来监听元素上的点击并动态地从模板创建弹出窗口。 例如。我希望这个 html 和所有方法都嵌入到指令中,这样我就可以添加这样的功能 <a youtubeVideoPopup="aFLEAmssDfax"></a> 并将 videoId 传递给生成的弹出窗口,例如:

<div preventBodyScroll class="modal-window modal-window--dark modal-window--no-padding">
    <a href="javascript:void(0)" class="modal-window__close" (click)="closeVideoPopup()"></a>

    <div class='embed-responsive embed-responsive-16by9'>
        <iframe id="ytplayer" type="text/html" [src]="videoId" frameborder="0" allowfdivlscreen></iframe>
    </div>
</div>
<div class="modal-backdrop" (click)="toggleVideoPopup()"></div>

我不希望它成为组件,因为它每次都需要一些额外的编码,包括 (click) 处理程序 - 我有很多不同的元素可以触发具有不同布局和样式的 youtube 视频弹出窗口。

任何人都可以建议移动方向吗? Angular 5+ 可以实现吗?我从创建模板开始,但 @Directive 甚至不接受 templateUrl 作为参数。


对于这个特定的 youtube-popup 案例,我看到的一个可能的解决方案是直接在 app.component.html 中使用 <youtube-popup-component> 并通过 directive -> service -> component 链将 id 传递给组件并显示基于该广告的弹出窗口,假设页面上一次只能显示一个 youtube 弹出窗口

例如,您可以查看此存储库 https://github.com/pleerock/ngx-tooltip/tree/master/src。那里有一些指令示例,该指令将动态创建的组件附加到应用了 [tooltip] 的组件。基本上最重要的事情是将 ViewContainerRefComponentFactoryResolver 注入到你的指令中,从那里你可以构建一些组件并将其附加到 DOM.