gpt4 book ai didi

angular - 在结构指令中声明变量

转载 作者:太空狗 更新时间:2023-10-29 18:09:25 26 4
gpt4 key购买 nike

我的 Angular 应用程序中有一个自定义结构指令,如下所示:

@Directive({
selector: '[appIfData]'
})
export class IfDataDirective {

private hasView = false;

@Input()
set appIfData(condition: boolean) {
if (condition && !this.hasView) {
this.viewContainerRef.clear();
this.viewContainerRef.createEmbeddedView(this.templateRef);
this.hasView = true;
} else if (!condition) {
this.viewContainerRef.clear();
const factory = this.componentFactoryResolver.resolveComponentFactory(ContentMessageComponent);
const messageComponentRef = this.viewContainerRef.createComponent(factory);
messageComponentRef.instance.message = 'No data is available yet';
messageComponentRef.instance.icon = 'fas fa-info';
this.hasView = false;
}
}
}

在 html 模板中使用它:

<ng-container *appIfData="(referenceService.documentUserTypes$ | async) as userDocTypes">

但是我无法访问模板其余部分中声明的变量“userDocTypes”,就像我在使用 ngIf 时所做的那样。

我想这是一种正常行为,但我找不到执行此操作的好方法。

如有任何帮助,我们将不胜感激。

编辑:

这就是我使用它的方式,它在子元素中。如前所述,如果我将其更改为 *ngIf ,它就可以正常工作:

enter image description here

编辑 2:

更新指令

@Directive({
selector: '[appIfData]'
})
export class IfDataDirective {

private hasView = false;

@Input()
set appIfData(data: any) {
if (data && !this.hasView) {
this.viewContainerRef.clear();
this.viewContainerRef.createEmbeddedView(this.templateRef, { appIfData: data });
this.hasView = true;
} else if (!data) {
this.viewContainerRef.clear();
const factory = this.componentFactoryResolver.resolveComponentFactory(ContentMessageComponent);
const messageComponentRef = this.viewContainerRef.createComponent(factory);
messageComponentRef.instance.message = 'No data is available yet';
messageComponentRef.instance.icon = 'fas fa-info';
this.hasView = false;
}
}

最佳答案

as 中声明的变量只能在其子元素中访问,例如

<ng-container *appIfData="(referenceService.documentUserTypes$ | async) as userDocTypes">
<div>{{ userDocTypes }}</div> // you can access here
</ng-container>

<div>{{ userDocTypes }}</div> // you cannot access here

我认为您对可以在其模板中访问的模板引用感到困惑

<div>
<input type="text" #myInput value="123">
</div>

<div>{{ myInput.value }}</div> // you can access template variable outside of it

关于angular - 在结构指令中声明变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55394193/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com