在TypeScript中如何访问Google Maps事件监听器内数组的最新值
实现方案
核心问题是你当前的myArray是方法内的局部变量,作用域仅限制在声明它的方法内部,外部方法无法访问。你可以根据你的代码场景选择以下方案:
方案1:类场景(TypeScript最常用方案)
把myArray提升为类的成员属性,同时把监听器的回调改为箭头函数绑定this指向,避免作用域偏移:
class MapOperator { // 声明类属性,可根据需求调整访问修饰符(public/private/protected) private myArray: google.maps.LatLng[] = []; // 你原有注册监听器的方法 registerMapListener(bermudaTriangle: google.maps.Polygon, poly: google.maps.Polygon) { // 回调改用箭头函数,绑定this指向类实例 google.maps.event.addListener(bermudaTriangle.getPath(), 'set_at', (index, obj) => { console.log('Vertex moved on outer path.'); console.log(obj.lat() ,'--', obj.lng() ); this.myArray = poly.getPath().getArray(); }); } // 你需要访问myArray的其他方法 getLatestVertexArray() { // 直接取this.myArray即可拿到最新值 return this.myArray; } }
方案2:非类的模块场景
如果你的代码没有封装在类里,直接把myArray声明在两个方法的公共父作用域(比如模块顶层)即可:
// 模块顶层声明myArray,两个方法都可以访问 let myArray: google.maps.LatLng[] = []; // 注册监听器的方法 function registerMapListener(bermudaTriangle: google.maps.Polygon, poly: google.maps.Polygon) { google.maps.event.addListener(bermudaTriangle.getPath(), 'set_at', (index, obj) => { console.log('Vertex moved on outer path.'); console.log(obj.lat() ,'--', obj.lng() ); myArray = poly.getPath().getArray(); }); } // 另一个访问方法 function getLatestVertexArray() { return myArray; }
注意事项
- TypeScript中不建议使用
var声明变量,尽量改用let/const避免变量提升带来的作用域问题 - 访问
myArray时可以加非空判断或者默认值,避免监听器还没触发时取到空数组的异常
内容的提问来源于stack exchange,提问作者Rahul
相关产品推荐
相关产品推荐

