【发布时间】:2019-01-16 11:18:36
【问题描述】:
我在父 component.ts 文件中有一个如下所示的 items 数组
items = [
{text: 'Length' , value: 10 },
{text : 'Degree' , value : "108"},
{text : 'Edges' , value : [10,20,30]}
]
然后我有一个名为 app-label-values 的组件放置在父组件的 *ngFor 循环中,如下所示
<div *ngFor ="let item of items">
<app-label-values
label="item.text"
value = "item.value">
</app-label-values>
</div>
app-label-values 组件目的是显示标签和标签对应的值。
例如。年龄:10
这里的标签总是一个文本,而值的类型可以是动态的(数字、字符串、数组)
所以当值是数组类型时,我只需要显示数组的长度,就像在我们的例子中组件应该显示“边:3”,因为 [10,20,30].length 是 3。
我的目标不是在 app-label-values 组件中使用这种类型检查逻辑,因为我需要它是愚蠢的并且只显示传递给它的内容。
如何在渲染时从父组件本身解决这个问题。
请帮助。在此先感谢。
【问题讨论】:
-
value = "item.value.length"?? -
@GeorgeBailey 这对于数字类型值不起作用, value.length 会抛出错误,即使我将数字转换为字符串并对其应用长度,它也会给我带来不希望的结果。例如。 '10'.length = 2
-
好的。我并没有真正尝试过,但您可以通过
value = "item.value.constructor == Array ? item.value.length : item.value"进行检查 -
谢谢乔治,构造函数检查对我来说似乎是一种更清洁的方法。谢谢:)
-
value = "item.value.push ? item.value.length : item.value"。我这样做了,它也适用于模板,因为 push 方法只属于数组原型。但是我希望我能得到比这更好的解决方案。
标签: javascript angular typescript ecmascript-6 angular5