Angular 为什么我会得到;TypeError:无法读取未定义的属性;在地图循环中?
在Ionic4应用程序中运行此函数时(使用Angular 7和Typescript 3): 我已经解决了这个问题,用这种方式修改了函数:Angular 为什么我会得到;TypeError:无法读取未定义的属性;在地图循环中?,angular,typescript,google-maps-api-3,ionic4,Angular,Typescript,Google Maps Api 3,Ionic4,在Ionic4应用程序中运行此函数时(使用Angular 7和Typescript 3): 我已经解决了这个问题,用这种方式修改了函数: public addDeviceMarkers(devicePositions: Array<any>): void { const mapObject = this.map; devicePositions.map(function(device) { const position = {lat: device.l
public addDeviceMarkers(devicePositions: Array<any>): void {
const mapObject = this.map;
devicePositions.map(function(device) {
const position = {lat: device.latitude, lng: device.longitude};
const marker = new google.maps.Marker({
position: position,
title: device.deviceId
});
marker.setMap(mapObject);
});
}
public addDeviceMarkers(devicePositions:Array):无效{
const mapObject=this.map;
devicePositions.map(功能(设备){
const position={lat:device.latitude,lng:device.longitude};
const marker=new google.maps.marker({
职位:职位,,
标题:device.deviceId
});
marker.setMap(mapObject);
});
}
我必须定义const mapObject=this.map代码>。
问题是,为什么在映射循环中这个是未定义的?您可以在不声明的情况下实现这一点
const mapObject=this.map
public addDeviceMarkers(devicePositions:Array):无效{
var selfRef=此;
devicePositions.map(功能(设备){
const position={lat:device.latitude,lng:device.longitude};
const marker=new google.maps.marker({
职位:职位,,
标题:device.deviceId
});
marker.setMap(selfRef.map);
});
}
使用箭头函数,它将保留此
也可以使用forEach(),而不是map()。map()用于将A数组转换为B数组。您只需要对A数组的每个元素执行某些操作。这就是forEach()的作用。使用forEach,问题仍然存在,保存上下文或使用箭头函数可以解决问题,如解决方案链接中所述。
core.js:15724 ERROR Error: Uncaught (in promise): TypeError: Cannot read property 'map' of undefined
TypeError: Cannot read property 'map' of undefined
at google-map.component.ts:214
public addDeviceMarkers(devicePositions: Array<any>): void {
const mapObject = this.map;
devicePositions.map(function(device) {
const position = {lat: device.latitude, lng: device.longitude};
const marker = new google.maps.Marker({
position: position,
title: device.deviceId
});
marker.setMap(mapObject);
});
}
public addDeviceMarkers(devicePositions: Array<any>): void {
var selfRef = this;
devicePositions.map(function(device) {
const position = {lat: device.latitude, lng: device.longitude};
const marker = new google.maps.Marker({
position: position,
title: device.deviceId
});
marker.setMap(selfRef.map);
});
}