Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 为什么我会得到;TypeError:无法读取未定义的属性;在地图循环中?_Angular_Typescript_Google Maps Api 3_Ionic4 - Fatal编程技术网

Angular 为什么我会得到;TypeError:无法读取未定义的属性;在地图循环中?

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

在Ionic4应用程序中运行此函数时(使用Angular 7和Typescript 3):

我已经解决了这个问题,用这种方式修改了函数:

  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);
    });
  }