我有 admin.users.list.html 作为父模板,它向子组件输入一些数据:
<general-entities-list-container *ngIf="{
entityType: entityType$ | async
} as asyncData"
[entityType]='asyncData.entityType'
[entityTypeHardCoded]="'users'"
[entityTypeSet]="'users'"
>
</general-entities-list-container>
我有 general-entity-list-container.html (子模板):
entityType is:{{ entityType }} <br/>
entityTypeSet is:{{ entityTypeSet }} <br/>
entityTypeSet_ is:{{ entityTypeSet_ }} <br/>
entityTypeHardCoded is:{{ entityTypeHardCoded }} <br/>
admin.users.list.ts:
entityType$: Observable<string> = of('users');
general-entity-list-container.ts 有:
@Input() entityType: string;
@Input() entityTypeHardCoded: string;
entityTypeSet_: string;
@Input() set entityTypeSet(cet: string) {
this.entityTypeSet_ = cet;
//this.handleChangeCurrentEntityType(cet);
}
get entityTypeSet(){
return this.entityTypeSet_;
}
我无法在子组件模板中的任何地方输出。这里有什么问题。我changeDetection: ChangeDetectionStrategy.OnPush,
在父组件和子组件上都使用。
首先,您的 *ngIf 将始终返回 true (它检查是否定义了 asyncData 对象,但您实际上是在定义它,所以这将是 true)。如果您尝试将异步管道订阅组合在一起,那么最好在顶部包装器元素中使用该 *ngIf ,然后在您的子元素中使用
*ngIf="asyncData.entityType"
就像是:
<div *ngIf="{
entityType: entityType$ | async
} as asyncData"
<child-component
*ngIf="asyncData.entityType"
[entityType]="asyncData.entityType">
</child-component>
</div>
然后我看到一个单引号,应该是双引号:
[entityType]='asyncData.entityType'
应该:
[entityType]="asyncData.entityType"
除此之外,它还适用于 stackblitz。所以肯定有其他问题。将组件导入到模块中,将模块导入到模块中,在组件中引用错误的模板等。但似乎 Angular 输入仍然有效:)
我建议您先尝试使用 stackblitz,然后检查您的组件/模块设置中可能还有什么问题。问题就在那里,而不是在输入中。
https://stackblitz.com/edit/angular-ivy-zgqtey?file=src%2Fapp%2Fapp.component.html[][1]
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句