我尝试显示从外部JSON文件到html表的数组数据。我设法在控制台日志中读取数据,但是无法显示数据。我对Angular 7还是很陌生,所以在编码过程中可能会错过一些重要的事情,对此我一无所知。
app.component.ts
import { Component } from '@angular/core';
import { HttpClient } from '@angular/common/https';
import { HttpErrorResponse } from '@angular/common/https';
import { getRootView } from '@angular/core/src/render3/util';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent {
constructor (private httpService: HttpClient) { }
parameter: string;
ngOnInit () {
this.httpService.get('./assets/fyp2019-ff11e-export.json').subscribe(
data => {
this.parameter = data as string; // FILL THE ARRAY WITH DATA.
console.log(this.parameter);
},
(err: HttpErrorResponse) => {
console.log (err.message);
}
);
}
从json文件中采样数据:
{
"GoogleSheet" : {
"Data1" : {
"LevelTankA" : 1.5,
"LevelTankB" : 1,
"MotorSpeed" : 15,
"Time" : 1
},
"Data2" : {
"LevelTankA" : 5,
"LevelTankB" : 2.3,
"MotorSpeed" : 15,
"Time" : 2
},
"Data3" : {
"LevelTankA" : 6,
"LevelTankB" : 2.9,
"MotorSpeed" : 20,
"Time" : 3
}
}
}
component.html的一部分编码
<table>
<tr>
<th>Tank A</th>
<th>Tank B</th>
<th>Motor Speed</th>
<th>Time</th>
</tr>
<!-- BIND ARRAY TO TABLE -->
<tr *ngFor="let val of parameter; let i = index">
//prepare the key and grab the data key and values
<td *ngFor="let obj of val">{{obj.LevelTankA | json}}</td>
<td *ngFor="let obj of val">{{obj.LevelTankB | json}}</td>
<td *ngFor="let obj of val">{{obj.MotorSpeed | json}}</td>
<td *ngFor="let obj of val">{{obj.Time | json}}</td>
</tr>
</table>
我不知道为什么不能将数组绑定到html表。我尝试使用* ngFor和* ngIf进行各种编码,但仍然无法显示数据。
答案 0 :(得分:0)
问题在于参数变量的类型是字符串而不是数组:
parameter: string -> parameter: any[];
而且从服务获取数据时,应将响应作为对象处理。
this.httpService.get('./assets/fyp2019-ff11e-export.json').subscribe(
data => {
this.parameter = data; // FILL THE ARRAY WITH DATA.
console.log(this.parameter);
},
(err: HttpErrorResponse) => {
console.log (err.message);
}
);
编辑: json文件也有问题,应该像这样:
{
"GoogleSheet" : [
"Data1" : {
"LevelTankA" : 1.5,
"LevelTankB" : 1,
"MotorSpeed" : 15,
"Time" : 1
},
"Data2" : {
"LevelTankA" : 5,
"LevelTankB" : 2.3,
"MotorSpeed" : 15,
"Time" : 2
},
"Data3" : {
"LevelTankA" : 6,
"LevelTankB" : 2.9,
"MotorSpeed" : 20,
"Time" : 3
}
]
}
并且由于存在顶层对象,因此必须修改ngfor:
<tr *ngFor="let val of parameter.GoogleSheet; let i = index">
答案 1 :(得分:0)
在我的项目中使用Json文件数据。
首先创建文件夹并创建文件parameter.json
我已经像下面一样修改了您的Json
[
{
"LevelTankA": 1.5,
"LevelTankB": 1,
"MotorSpeed": 15,
"Time": 1
},
{
"LevelTankA": 5,
"LevelTankB": 2.3,
"MotorSpeed": 15,
"Time": 2
},
{
"LevelTankA": 6,
"LevelTankB": 2.9,
"MotorSpeed": 20,
"Time": 3
}
]
路径应该像
ProjectName\src\app\pages\module\_configuration\parameter.json
在组件中导入parameter.json
import * as parameterData from './_configuration/parameter.json';
将参数声明为以下任何内容
parameter: any;
在ngOninit中初始化您将获得数据。
ngOnInit() {
this.parameter= <any>parameterData.default;
}
我已经修改了您的HTML文件。
<table>
<tr>
<th>Tank A</th>
<th>Tank B</th>
<th>Motor Speed</th>
<th>Time</th>
</tr>
<!-- BIND ARRAY TO TABLE -->
<tr *ngFor="let val of parameter; let i = index">
//prepare the key and grab the data key and values
<td>{{ val.LevelTankA}}</td>
<td>{{ val.LevelTankB}}</td>
<td>{{ val.MotorSpeed}}</td>
<td>{{ val.Time}}</td>
</tr>
</table>
根据我的理解,我已经给出了解决方案,希望对您有用。