【发布时间】:2018-02-03 21:32:47
【问题描述】:
我已经被这个问题困扰了一段时间。我只是想将包含 Id、Name 和 Create Date 列的表加载到页面。我的 API 方法在 Visual Studio 的 Controller 类中运行良好。我之前在控制台中遇到过这个错误:
TypeError:无法读取未定义的属性“id”。
如果我删除 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-list.component.spec.ts
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { TestTableTburnsListComponent } from './test-table-tburns-list.component';
describe('TestTableTburnsListComponent', () => {
let component: TestTableTburnsListComponent;
let fixture: ComponentFixture<TestTableTburnsListComponent>;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ TestTableTburnsListComponent ]
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(TestTableTburnsListComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});
test-table-tburns-list.component.ts
import { Component, OnInit } from '@angular/core';
import { TestTableTburnsApiService } from '../../../services/test-table-tburns-api.service';
import { TestTableTburnsModel } from '../../../models/test-table-tburns-model';
@Component({
selector: 'app-test-table-tburns-list',
templateUrl: './test-table-tburns-list.component.html',
styleUrls: ['./test-table-tburns-list.component.css']
})
export class TestTableTburnsListComponent implements OnInit {
testTableTburnsList: Array<TestTableTburnsModel>;
title = "Hello TestTableTburns List";
constructor(private testTableTburnsApi: TestTableTburnsApiService) { }
ngOnInit() {
this.testTableTburnsApi
.getTestTableTburns()
.subscribe(_ => this.testTableTburnsList = _, e => console.log(e));
}
}
test-table-tburns-api.service.spec.ts
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();
}));
});
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();
})
;
}
}
【问题讨论】:
-
响应的实际情况如何?在这种情况下,显示
NaN似乎很不寻常。 -
我的意思是您收到的响应如何? JSON。
-
响应为 200 'OK'。我认为它没有任何问题。
-
但是 JSON 响应是什么?您收到的数据:D 复制粘贴您的 JSON 的 sn-p。
-
希望我没有感到困惑。这是你要找的吗?这是我收到的数据: [{"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":5,"name ":"Amy Cook","createDate":"2018-01-18T15:35:22.333"},{"id":7,"name":"测试用户","createDate":"2018-01-22T20 :51:55.22"}]
标签: angular html-table components nan