javascript - 在 *ngIf 指令中:如何将函数的返回值存储在变量中并在同一个 *ngIf 中使用它?
问题描述
我的用例如下:
- 我有一个返回数组的函数
- 我想有条件地渲染一个组件 - 如果一个数组存在并且它的长度大于零。
- 我想将这个返回的数组作为一个传递
@Input()
给这个组件。
因为数组的内容是计算出来的,所以我不想调用这个函数两次,因此使用 getter 也无济于事。
我尝试了许多不同的方法,仅列出几个:
<order-list *ngIf="customer.getOrders() as orders && orders.length > 0" [orders]="orders" ></order-list>
<order-list *ngIf="(customer.getOrders() as orders) && orders.length > 0" [orders]="orders" ></order-list>
<order-list *ngIf="(customer.getOrders()) as orders && (orders.length > 0)" [orders]="orders" ></order-list>
不幸的是,我不断收到一堆错误:
模板解析错误:TypeError:无法读取未定义的属性“toUpperCase”(“<div>
解析器错误:意外的标记 &&、预期的标识符、关键字或列中的字符串第 23 列的解析器错误:缺少预期的)
[ERROR ->]*ngIf="(customer.getOrders() as orders) && orders.length > 0"
这是具有上述问题的堆栈闪电战。
解决方案
我想出了一个解决方案。
我没有在一个指令中使用逻辑连词,而是将我的组件包装起来,并将我的第一个条件放入其中,然后将另一个直接放入组件本身,因此它仍然是两个条件的 AND 并且它就像一个魅力,因为根据文档:*ngIf
<ng-container>
*ngIf
*ngIf
Angular <ng-container> 是一个不会干扰样式或布局的分组元素,因为 Angular 不会将它放入 DOM 中。
<ng-container *ngIf="customer.getOrders() as orders">
<order-list *ngIf="orders.length > 0" [orders]="orders" ></order-list>
</ng-container>
Stackblitz的解决方案。
推荐阅读
- bash - 如何在单引号内转义双引号内的变量?
- java - 无法发送显示 SocketException 的 post https 请求:连接重置
- leaflet - 如何使用 Leaflet 和 L.Control.ListMarkers 从列表中获取悬停元素上的标记弹出窗口?
- c - Is there any problem while returning the "char pointer" from function
- php - 使 mysql 查询适应 mssql
- java - move xml namespace declarations to root element with jax-ws annotations
- vba - NOT的奇怪行为
- python - Pythonic way to get the max difference between any 2 consecutive elements of a list
- java - 文档显示在单独的布局中,而不是显示在一个布局中?
- docker - 入口路由不适用于使用 helm 部署的服务