如果我对数据进行硬编码,那么所有标记都会很好地显示出来。如果我在 this.markers.push(newMarker)行中发表评论;并替换为下一个,我得到一个 ERROR TypeError:无法读取未定义的属性'push'
如果我使用 this.markers = [newMarkers] ,则最后一个json元素中只有一个显示为标记。
我如何一次显示所有个标记,异步是否有问题?
ngOnInit() {
this._mapService.getMarkers().subscribe(data => {
data.map(a => {
const lat = a.lat;
const lng = a.lng;
const name = a.name;
const newMarker = marker(
[lat, lng], {
icon: icon({
iconSize: [25, 25],
iconAnchor: [13, 41],
iconUrl: 'assets/yellow.png',
})
}
);
newMarker.bindPopup('<p>' + name + '</p>', {autoPan: true});
// this.markers.push(newMarker);
this.markers = [newMarker];
});
服务
@Injectable({
providedIn: 'root'
})
export class MapserviceService {
private _markers = '../../assets/markers/markers.json';
constructor(private http: HttpClient) {}
getMarkers(): Observable<any> {
return this.http.get<any>(this._markers);
}
JSON数据
[{
"name": "Canada",
"lat": 56.130366,
"lng": -106.346771
},
...
{
"name": "Anguilla",
"lat": 18.220554,
"lng": -63.068615
}
]
有效的硬编码数据
function createIcon2() {
return icon({
iconSize: [25, 25],
iconAnchor: [13, 41],
iconUrl: 'assets/yellow.png',
});
}
this.markers =
[
marker([35, -76], { icon: createIcon2() }),
marker([36, -81], { icon: createIcon2() }),
marker([37, -88], { icon: createIcon2() }),
marker([38, -99], { icon: createIcon2() }),
marker([39, -111], { icon: createIcon2() })
];
console.log('working', this.markers);
答案 0 :(得分:2)
public markers: Marker[];
声明了您的markers
成员,但未初始化/为其分配任何内容。
: Markers[]
部分用于TypeScript类型声明,但不初始化。
public markers: Marker[] = []
会将其初始化为一个数组,您可以在其上使用push
方法。