我正在开发angular 4和PHP,Mysql。我对服务器的回复是
[{"transportation_pf":"1"},[{"destination":"Swarget"}],
{"transportation_pf":"5"},[{"destination":"Swarget"},
{"destination":"Dombivli"}]]
巴士服务和组件
import { Injectable } from '@angular/core';
import {Bus } from './bus';
import {Headers,Http } from '@angular/http';
import {Observable} from'rxjs/Observable';
import 'rxjs/add/operator/toPromise';
@Injectable()
export class BusService {
private busUrl='http://localhost/MycityDB/bus.php';
constructor(private http:Http) { }
getPlatforms(){
return this.http.get(this.busUrl).map(
(res)=>res.json()
);
}
private handleError(error: any): Promise<any> {
console.error('An error occurred', error);
return Promise.reject(error.message || error);
}
}
总线组件
import { Component, OnInit } from '@angular/core';
import { Bus } from './bus';
import {BusService } from './bus.service';
import { Http } from '@angular/http';
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/observable/forkJoin';
import 'rxjs/add/operator/map';
@Component({
selector: 'app-bus',
templateUrl: './bus.component.html',
styleUrls: ['./bus.component.css']
})
export class BusComponent implements OnInit {
busData: Bus[];
loadedCharacter: {};
private busUrl='http://localhost/MycityDB/bus.php';
constructor(private http: Http,private busservice: BusService) { }
ngOnInit() {
this.busservice.getPlatforms().subscribe(
(data)=>this.busData=data
);
}
}
总线组件html是
<p *ngFor="let bus of busData">
Bus works ! {{bus.destination}}
</p>
总线类如下
export class Bus {
transportation_pf : string;
destination: string[];
}
Html输出只显示我不知道代码出错的地方。
# Bus works ! #
# Bus works ! #
# Bus works ! #
# Bus works ! #
有人可以帮忙吗?我很困惑。
答案 0 :(得分:0)
尝试添加* ngIf =&#34; busData&#34;
<div *ngIf="busData">
<p *ngFor="let bus of busData">
Bus works ! {{bus.destination}}
</p>
</div>
或异步管道
<p *ngFor="let bus of busData | async">
这是Observable。
您必须添加服务
import 'rxjs/add/operator/map';
答案 1 :(得分:0)
我可以注意到你得到的反应是数组和对象的组合。在您的模板ngfor
中,只有busData
包含bus
对象的数组而不是数组和对象的组合时才会迭代。因此,将响应提取到busData
对象的数组中。然后使用ngfor
进行迭代。
答案 2 :(得分:0)
我在总线组件文件
中进行了以下更改generateArray(obj){
return Object.keys(obj).map((key)=>{ return obj[key]});
}
按照这个我也在HTML文件中进行更改
<div *ngFor="let mem of busData">
Platform Number {{mem.transportation_source}}<br/>Destinations :
<span *ngFor="let v of generateArray(mem.destination)"> {{v}} </span>
</div>
生成JSON响应时略有修正 我用以下格式生成
[
{"transportation_source":"5","destination":["Swarget","Dombivli"]},
{"transportation_source":"5","destination":["Swarget","Dombivli"]}
]