要解决“Angular 8授权指令只在第一次生效”的问题,你可以使用一个flag来追踪指令是否已经应用过。下面是一个示例代码:
FirstTimeDirective
的授权指令:import { Directive, Input, TemplateRef, ViewContainerRef } from '@angular/core';
@Directive({
selector: '[appFirstTime]'
})
export class FirstTimeDirective {
private hasView = false;
constructor(
private templateRef: TemplateRef,
private viewContainer: ViewContainerRef
) { }
@Input()
set appFirstTime(condition: boolean) {
if (condition && !this.hasView) {
this.viewContainer.createEmbeddedView(this.templateRef);
this.hasView = true;
} else if (!condition && this.hasView) {
this.viewContainer.clear();
this.hasView = false;
}
}
}
appFirstTime
指令,同时将一个boolean值传递给appFirstTime
:
这段内容只会在第一次渲染时显示。
在上述代码中,appFirstTime
指令接受一个boolean值作为输入,并根据该值决定是否创建或销毁模板内容。每次appFirstTime
输入值变为true
时,模板内容都会被创建一次。当appFirstTime
输入值变为false
时,模板内容会被销毁。
希望这个解决方案对你有帮助!