Angular 数组在传递 JSON 数据时保持未定义
Angular array remains undefined when passing JSON data
我有一个 API returns JSON 关于足球的数据。然后将数据传递给前端 (angular),但在将其传递给数组时,数组仍未定义。
JSON数据:
match_id":"194200",
"country_id":"41",
"country_name":"England",
"league_id":"148",
"league_name":"Premier League",
"match_date":"2019-04-01",
"match_status":"Finished",
"match_time":"21:00",
"match_hometeam_id":"2617",
"match_hometeam_name":"Arsenal",
"match_hometeam_score":"2 ",
"match_awayteam_name":"Newcastle",
"match_awayteam_id":"2630",
"match_awayteam_score":" 0",
这是angular代码解析JSON数据,放入数组显示:
export class ResultComponent implements OnInit {
searchFilter: string;
resultArr: FootballModel[];
constructor(private footballService: FootballService, private route:
ActivatedRoute) {}
ngOnInit() {
this.footballService.getResults().subscribe(x => this.resultArr = x);
console.log(this.resultArr);
}
当我console.logx传入subscribe时,返回JSON信息。所以直到 x 部分它传递得很好但是当它传递到 resultArray 和 console.log 那部分时,它返回 undefined
。不知道有没有人可以帮忙。
这是型号:
export class FootballModel {
countryName: string;
leagueName: string;
matchDate: string;
matchHomeTeamName: string;
matchAwayTeamName: string;
matchHomeTeamScore: string;
matchAwayTeamScore: string;
}
编辑:
我也试图在 table 中显示该数据,但不知何故它没有显示。很确定这也是一个容易犯的错误。
<tbody>
<tr *ngFor="let result of results">
<td>{{result.countryName}}</td>
<td>{{result.leagueName}}</td>
<td>{{result.matchDate}}</td>
<td>{{result.homeTeam}}</td>
<td>{{result.awayTeam}}</td>
<td>{{result.homeTeamScore}}</td>
<td>{{result.awayTeamScore}}</td>
</tr>
Http 请求 return 可在 Angular 上观察到。 Observables 具有异步回调函数,您可以通过订阅它来获取数据。但是,当您尝试在 .subscribe 至少工作一次之前访问回调函数之外的数据时,它必须是未定义的。因为它在您 API 发送响应之前写入控制台。如果您像这样更改 ngOnInit 函数,它一定会起作用。
ngOnInit() {
this.footballService.getResults().subscribe(x => {
this.resultArr = x;
console.log(this.resultArr);
});
}
另请查看 Observables
的文档
这是此案例的另一个示例:
ngOnInit() {
console.log("a");
this.footballService.getResults().subscribe(x => {
console.log("c");
this.resultArr = x;
console.log(this.resultArr);
});
console.log("b");
}
控制台的预期结果是
"a" "b" "c"
我有一个 API returns JSON 关于足球的数据。然后将数据传递给前端 (angular),但在将其传递给数组时,数组仍未定义。
JSON数据:
match_id":"194200",
"country_id":"41",
"country_name":"England",
"league_id":"148",
"league_name":"Premier League",
"match_date":"2019-04-01",
"match_status":"Finished",
"match_time":"21:00",
"match_hometeam_id":"2617",
"match_hometeam_name":"Arsenal",
"match_hometeam_score":"2 ",
"match_awayteam_name":"Newcastle",
"match_awayteam_id":"2630",
"match_awayteam_score":" 0",
这是angular代码解析JSON数据,放入数组显示:
export class ResultComponent implements OnInit {
searchFilter: string;
resultArr: FootballModel[];
constructor(private footballService: FootballService, private route:
ActivatedRoute) {}
ngOnInit() {
this.footballService.getResults().subscribe(x => this.resultArr = x);
console.log(this.resultArr);
}
当我console.logx传入subscribe时,返回JSON信息。所以直到 x 部分它传递得很好但是当它传递到 resultArray 和 console.log 那部分时,它返回 undefined
。不知道有没有人可以帮忙。
这是型号:
export class FootballModel {
countryName: string;
leagueName: string;
matchDate: string;
matchHomeTeamName: string;
matchAwayTeamName: string;
matchHomeTeamScore: string;
matchAwayTeamScore: string;
}
编辑: 我也试图在 table 中显示该数据,但不知何故它没有显示。很确定这也是一个容易犯的错误。
<tbody>
<tr *ngFor="let result of results">
<td>{{result.countryName}}</td>
<td>{{result.leagueName}}</td>
<td>{{result.matchDate}}</td>
<td>{{result.homeTeam}}</td>
<td>{{result.awayTeam}}</td>
<td>{{result.homeTeamScore}}</td>
<td>{{result.awayTeamScore}}</td>
</tr>
Http 请求 return 可在 Angular 上观察到。 Observables 具有异步回调函数,您可以通过订阅它来获取数据。但是,当您尝试在 .subscribe 至少工作一次之前访问回调函数之外的数据时,它必须是未定义的。因为它在您 API 发送响应之前写入控制台。如果您像这样更改 ngOnInit 函数,它一定会起作用。
ngOnInit() {
this.footballService.getResults().subscribe(x => {
this.resultArr = x;
console.log(this.resultArr);
});
}
另请查看 Observables
的文档这是此案例的另一个示例:
ngOnInit() {
console.log("a");
this.footballService.getResults().subscribe(x => {
console.log("c");
this.resultArr = x;
console.log(this.resultArr);
});
console.log("b");
}
控制台的预期结果是
"a" "b" "c"