Angular中可显示完整JSON数组但无法读取单个属性的问题
首先咱们得先搞清楚核心问题:你的Groups是一个数组(从你给出的JSON [ { "Id": 3, "Name": "Name I", "Group_Name": "Group I" } ] 能看到,它被方括号包裹着),不是单个对象。
为什么直接用{{ Groups.Name }}会报错?
数组本身并没有Name这个属性,你直接访问Groups.Name就相当于在一个数组上找它不存在的属性,自然会抛出Cannot read property 'Name' of undefined(或者更准确地说,是数组没有Name属性,返回undefined)。
为什么*ngFor能正常工作?
*ngFor是在遍历数组里的每一个元素,每次循环拿到的Group(注意是单数的循环变量)是数组里的单个对象,这个对象是有Name属性的——不过看你代码里写的{{ Groups.Name }},这里其实是笔误,应该写成{{ Group.Name }}(用循环的单个变量,而不是原数组),这也是你能正常展示的原因。
解决办法分两种场景:
场景1:数组里只有一个元素,想直接取它的Name
直接通过数组索引访问,同时用Angular的可选链操作符?.防止数组为空或未初始化时报错:{{ Groups?.[0]?.Name }}这里的
?.会在Groups为undefined/null,或者Groups[0]不存在的时候,直接返回undefined,不会抛出错误。场景2:遍历展示所有数组元素
继续用*ngFor,但要注意使用循环变量(单数的group)来访问属性,修正后的代码示例:<select class="form-control"> <option *ngFor="let group of Groups" [value]="group.Id"> {{ group.Name }} </option> </select>额外提示:避免初始阶段的报错
如果你的Groups是异步加载的(比如从后端API获取),建议在组件里先初始化一个空数组:// 组件.ts文件里 public Groups: any[] = [];这样即使数据还没加载完成,页面也不会因为
Groups是undefined而报错。
内容的提问来源于stack exchange,提问作者user68288

