检查模板中变量是否为数组、字符串、数字

Shi*_*yan 4 javascript typescript ecmascript-6 angular angular5

我在父 component.ts 文件中有一个如下所示的 items 数组

items = [
    {text: 'Length' , value: 10 },
    {text : 'Degree' , value : "108"},
    {text : 'Edges' , value : [10,20,30]}
]
Run Code Online (Sandbox Code Playgroud)

然后我将一个名为app-label-values 的组件放置在父组件的 *ngFor 循环内,如下所示

<div *ngFor ="let item of items">
  <app-label-values
   label="item.text"
   value = "item.value">
  </app-label-values>
</div>
Run Code Online (Sandbox Code Playgroud)

app-label-values组件的目的是显示标签以及该标签对应的值。

例如。年龄:10

这里的标签始终是文本,而值的类型可以是动态的(数字、字符串、数组)

因此,当值是数组类型时,我只需要显示数组的长度,就像在我们的例子中一样,组件应该显示“Edges:3”,因为 [10,20,30].length 是 3。

我的目标不是在 app-label-values 组件中使用这种类型检查逻辑,因为我需要它是愚蠢的并且仅显示传递给它的内容。

如何在渲染时从父组件本身解决这个问题。

请帮忙。提前致谢。

edk*_*ked 7

您可以使用 anngIf来检查 是否item.value具有长度属性。在父组件中,您仍然可以传递给子item.value组件,并在子组件中根据它是数组还是数字来显示值

  1. 检查长度属性
   <div *ngIf="item.value?.length > {{item.value.length}} </div>
Run Code Online (Sandbox Code Playgroud)

如果你想直接将数组的长度传递给你的子组件,你可以考虑使用三元运算符

value="item.value?.length ? item.value.length : item.value"
Run Code Online (Sandbox Code Playgroud)

如果要检查字符串值,请首先检查是否有长度属性。然后就可以使用+运算符来解析字符串。使用第二个三元运算符,您可以检查它是数字还是数组

value="item.value?.length ? +item.value ? item.value : item.value.length : item.value" 
Run Code Online (Sandbox Code Playgroud)
  1. 检查构造函数名称
value="item.value?.length ? item.value.length : item.value"
Run Code Online (Sandbox Code Playgroud)

使用构造函数,还可以检查该值是否是字符串、数字等。实时代码