Javascript 如何访问回调侦听器外部的数组元素
在下面发布的代码中,我试图从回调侦听器外部访问e.coordinateJavascript 如何访问回调侦听器外部的数组元素,javascript,angular,typescript,openlayers,Javascript,Angular,Typescript,Openlayers,在下面发布的代码中,我试图从回调侦听器外部访问e.coordinatethis.map.on('pointermove'…),如下所示。 单击按钮即可调用方法routeToField()。在这个方法中,我试图访问this.mousePointerLonLat的值。回调侦听器中的log语句this.map.on(…)将显示并包含 具有两个元素的数组类型中的值。 问题是,尽管有这一点,当在方法routeToField()i receive()中访问时,mousepointerlonat被初始化 ER
this.map.on('pointermove'…)
,如下所示。
单击按钮即可调用方法routeToField()
。在这个方法中,我试图访问this.mousePointerLonLat
的值。回调侦听器中的log语句this.map.on(…)
将显示并包含
具有两个元素的数组类型中的值。
问题是,尽管有这一点,当在方法routeToField()
i receive()中访问时,mousepointerlonat
被初始化
ERROR TypeError: Cannot read property '0' of undefined
at SiteMapComponent.push.zIrq.SiteMapComponent.routeToFiel
请让我知道如何从methosrouteToField
代码:
this.map.on('pointermove', (e)=>{
this.mousePointerLonLat = toLonLat(e.coordinate);
});
this.mousePointerLonLat = this.map.on.bind(this.mousePointerLonLat)
console.log("this.mousePointerLonLat: ", this.mousePointerLonLat);
console.log("this.mousePointerLonLat[0]: ", this.mousePointerLonLat[0]);
console.log("this.mousePointerLonLat[1]: ", this.mousePointerLonLat[1]);
var startLongitude = SynopsWebAppComponent.USER_COORDINATES.longitude;
var startLatitude = SynopsWebAppComponent.USER_COORDINATES.latitude;
var endLongitude = this.mousePointerLonLat[0];
var endLatitude = this.mousePointerLonLat[1];
this.openRouteServiceAPIService.getRouteAsVectorLayerBetweenStartEndLocations(startLongitude,startLatitude,endLongitude,endLatitude);
从我的评论中扩展
this.map.on('pointermove',{…})
中的回调是异步的。因此,如果在执行回调之前按下按钮,变量this.mousePointerLonLat
仍将是未定义的
。有关异步操作的更多信息,请参阅
一个快速的解决方案是禁用按钮,直到变量被初始化。你可以使用双爆炸算子
控制器(*.ts)
this.map.on('pointermove',(e)=>{
this.mousePointerLonLat=toLonLat(e.coordinate);
});
routeToField(){
log(“this.mousepointerlonat:”,this.mousepointerlonat);
log(“this.mousepointerlonat[0]:”,this.mousepointerlonat[0]);
log(“this.mousepointerlonat[1]:”,this.mousepointerlonat[1]);
var startongitence=SynopsWebAppComponent.USER_COORDINATES.longitude;
var startatitude=SynopsWebAppComponent.USER_COORDINATES.latitude;
var endLongitude=this.mousePointerLonLat[0];
var endLatitude=this.mousePointerLonLat[1];
这是StartEndLocation之间的.OpenRouteServiceApisService.GetRouteAsVectorLayer(
惊人的,
惊人的耐心,
经度,
端纬度
);
}
模板(*.html)
路线
使用箭头函数:this.map.on('pointermove',(e)=>{…})代码>。见帖子:@MichaelD我想你必须重新阅读这个问题,因为你的问题不清楚。1.您确定在单击按钮(或触发routeToField()
之前,将触发对('pointermove',…)
上的this.map.on的回调吗?2.你看过附件了吗?您认为在普通JS回调函数中,this.mousePointerLonLat
可以访问哪个变量?它仅在回调范围内访问。类成员变量未在普通JS回调函数中初始化。为此,您需要使用bind(this)
或arrow函数。@MichaelD您能告诉我如何使用bind(this)吗?@Letsamrit阅读了由Michael D链接的帖子。您正试图访问“this”,但这两个“this”-e并不相同。