Angular 角度表数据在网页上显示为NaN
我已经被这个问题困扰了一段时间。我只是尝试将包含Id、Name和createdate列的表加载到页面中。我的API方法在Visual Studio中的控制器类中运行良好。我以前在控制台中遇到过以下错误: TypeError:无法读取未定义的属性“id” 如果我删除Angular 角度表数据在网页上显示为NaN,angular,html-table,components,nan,Angular,Html Table,Components,Nan,我已经被这个问题困扰了一段时间。我只是尝试将包含Id、Name和createdate列的表加载到页面中。我的API方法在Visual Studio中的控制器类中运行良好。我以前在控制台中遇到过以下错误: TypeError:无法读取未定义的属性“id” 如果我删除id等,则name也会出现此错误 我做了一些研究,了解到我可以使用?elvis操作符,我已经将它实现到我的HTML中。实现elvis运算符后,错误消失,但所有表值现在显示为NaN。在“开发人员工具中的网络”下,我可以单击我的表名并查看在
id
等,则name
也会出现此错误
我做了一些研究,了解到我可以使用?
elvis操作符,我已经将它实现到我的HTML中。实现elvis运算符后,错误消失,但所有表值现在显示为NaN
。在“开发人员工具中的网络”下,我可以单击我的表名并查看在我的表中填充的数据
你知道问题是什么吗?我已包括以下代码:
test-table-tburns-list.component.html
<div>
<table>
<tr>
<th>Id</th>
<th>Name</th>
<th>Create Date</th>
</tr>
<tr *ngFor="let test-table-tburns of testTableTburnsList">
<td>{{ test-table-tburns?.id }}</td>
<td>{{ test-table-tburns?.name }}</td>
<td>{{ test-table-tburns?.createDate }}</td>
</tr>
</table>
</div>
test-table-tburns-api.service.ts
import { Injectable } from '@angular/core'
import { Http, Response, Headers } from '@angular/http';
import { environment } from '../../environments/environment';
import 'rxjs/add/operator/map';
@Injectable()
export class TestTableTburnsApiService {
domain : string;
constructor(public http: Http){
this.domain = environment.apiUrl;
}
public getTestTableTburns(){
let uri = this.domain + `/api/test-table-tburns`;
return this.http
.get(uri)
.map((res: Response) => {
return res.json();
})
;
}
}
javascript/typescript中不存在一元空检查。因此,您可以删除模板中的“?”
错误
TypeError:无法读取未定义的属性“id”
告诉您该属性testTableTburnsList
是一个数组,它包含至少一个等于未定义的项。您应该尝试在模板中添加{{testTableTburnsList | json}
,以了解您的问题(可能位于TestTableTburnsApiService
)原因是,您在*ngFor
中使用破折号,这是不允许的,因为它将被视为减法,因此,Angular正确地指出,减法的结果不是一个数字,也称为NaN
。因此,使用不带破折号的命名约定:
<tr *ngFor="let test of testTableTburnsList">
<td>{{test.id}}</td>
</tr>
{{test.id}
同样在这种情况下,在迭代数组时不需要使用安全导航操作符,因此如果
testTableTburnsList
为falsy,它将不会尝试显示数组中的单个对象,除非有值。感谢您的回复。我从HTML中删除了?
elvis操作符。我对您添加{{testTableTburnsList | json}}
的请求有点困惑。你能帮我理解吗?我将API服务代码添加到我的原始帖子中。希望这会有所帮助。在模板中使用{{testTableTburnsList | json}
可以查看属性testTableTburnsList
的实际值。也许您应该在组件构造函数中将该属性实例化为[]
,以避免undefined@WilliamKLEIN使用安全导航操作符在角。。。在模板中使用{testTableTburnsList | json}
时,该表显示了6行null(表中有6个参与者)。另外,我以前使用过安全导航操作符,表中显示了每个值的位置。响应实际是什么样子的?在这种情况下显示NaN
似乎很不寻常。我的意思是,您收到的响应看起来如何?JSON。响应为200“OK”。我看不出有任何问题。但是JSON响应是什么?您正在接收的数据:D复制粘贴一段JSON。希望我不会感到困惑。这就是你要找的吗?这是我收到的数据:[{“id”:1,“name”:“Tyler Burns”,“createDate”:“2018-01-18T15:31:47.12”},{“id”:2,“name”:“John Smith”,“createDate”:“2018-01-18T15:35:22.333”},{“id”:3,“name”:“Bob Jones”,“createDate”:“2018-01-18T15:35:22.333”},{“id”:4,“name”:“Brian Hall”,“createDate”:“2018-01-18T15:35:22.333”},{“id”库克,“name”,“createDate”:“艾米”:“2018-01-18T15:35:22.333”{“id”:7,“name”:“Test User”,“createDate”:“2018-01-22T20:51:55.22”}]如此微妙的事情怎么会让人头疼一天。谢谢你弄明白了这一点!是的,我也花了一段时间才看到它。当我尝试你的代码时,我意识到:我会有一个愉快的周末和愉快的编码!:)
import { TestBed, inject } from '@angular/core/testing';
import { TestTableTburnsApiService } from './test-table-tburns-api.service';
describe('TestTableTburnsApiService', () => {
beforeEach(() => {
TestBed.configureTestingModule({
providers: [TestTableTburnsApiService]
});
});
it('should be created', inject([TestTableTburnsApiService], (service: TestTableTburnsApiService) => {
expect(service).toBeTruthy();
}));
});
import { Injectable } from '@angular/core'
import { Http, Response, Headers } from '@angular/http';
import { environment } from '../../environments/environment';
import 'rxjs/add/operator/map';
@Injectable()
export class TestTableTburnsApiService {
domain : string;
constructor(public http: Http){
this.domain = environment.apiUrl;
}
public getTestTableTburns(){
let uri = this.domain + `/api/test-table-tburns`;
return this.http
.get(uri)
.map((res: Response) => {
return res.json();
})
;
}
}
<tr *ngFor="let test of testTableTburnsList">
<td>{{test.id}}</td>
</tr>