我创建了一个指令,当某些组件可见时防止滚动(angular 12),下面是我的代码:
import { DOCUMENT } from '@angular/common';
import { Directive, HostListener, Inject, Renderer2 } from '@angular/core';
@Directive({
selector: '[appRemoveScroll]'
})
export class RemoveScrollDirective {
constructor(
@Inject(DOCUMENT) private document: Document,
private renderer: Renderer2,
) { }
@HostListener('visible', ['$event'])
toggleNoScroll(visible: boolean) {
console.log("called", visible)
if (visible) {
this.renderer.addClass(this.document.body, 'no-scroll');
} else {
this.renderer.removeClass(this.document.body, 'no-scroll');
}
}
}
然后我将此指令添加到使用*ngIf
切换的组件:
<div *ngIf="displayProductLayover" id="product-layover" appRemoveScroll>
<app-layover [heading]="layoverHeading">
// More code here
我没有得到任何错误,但这是不工作,我没有得到任何控制台语句。我哪里做错了?
像div
这样的DOM元素不会发出visible
事件,所以@HostListener('visible', ['$event'])
不会被调用