我正在构建一个tabs组件,并在其标题中添加了一个ripple组件,该组件附加了一个类并进行动画处理,如下面的代码所示。
然而,即使它在我的所有其他组件(即按钮)中都能工作,但在ngTemplateOutlet上下文中使用时似乎也无法工作。也许我做错了什么。欢迎提供任何提示。
选项卡组件模板
<div class="nui-tab-group">
<ng-template #defaultTabsHeader let-tabs="tabs">
<ul class="nui-tab-group-buttons" *ngIf="tabs">
<li class="tab-button"
[ngClass]="{selected: tab.selected}"
(click)="selectedTab(tab)"
ripple-c
*ngFor="let tab of tabs">{{ tab.title }}
</li>
</ul>
</ng-template>
<ng-container *ngTemplateOutlet="headerTemplate || defaultTabsHeader; context: tabsContext"></ng-container>
<ng-content></ng-content>
</div>
波纹元件主要部件
@HostListener('click', ['$event', '$event.currentTarget'])
click(event, element) {
if (this.rippleStyle === 'expand') {
let ripple = document.createElement('span'),
rect = element.getBoundingClientRect(),
radius = Math.max(rect.height, rect.width),
left = event.pageX - rect.left - radius / 2 - document.body.scrollLeft,
top = event.pageY - rect.top - radius / 2 - document.body.scrollTop;
ripple.className = 'expand-ripple-effect animate';
ripple.style.width = ripple.style.height = radius + 'px';
ripple.style.left = left + 'px';
ripple.style.top = top + 'px';
ripple.addEventListener('animationend', () => {
element.removeChild(ripple);
});
element.appendChild(ripple);
}
}