Ionic 2(Typescript) - 变量范围和传递变量的问题

时间:2017-07-01 13:27:27

标签: javascript angular typescript ionic2

我有这个Ionic 2打字稿文件。我试图从另一个方法设置变量的值。我收到关于模态的未定义。

无法在下面设置 coord 的值。

export class RegisterMapPage {

      .. essential var here..
      public coord: any;

      constructor(
            ....
      ) {}

      ionViewDidLoad() {
            this.initMap()
      }

      initMap() {
            this.geolocation.getCurrentPosition().then((position) => {

                  // // // ..... All map related code here....

                  google.maps.event.addListener(marker, 'dragend', function () {
                        this.coord = marker.getPosition().lat() + ', ' + marker.getPosition().lng();
                        console.log(this.coord); // prints perfectly here.
                  });

            }, (err) => {
                  console.log(err);
            });
      }

      chooseCoord() {
            console.log(this.coord); // undefined ??
            this.viewCtrl.dismiss(this.coords);
      }

}

在标记拖动事件中,我更新变量值或坐标,但在打印时该值未定义。你能帮我解释一下代码吗?

感谢。

1 个答案:

答案 0 :(得分:1)

因为回调方法中的this不是RegisterMapPage实例,因为您使用function() {}语法进行回调。使用arrow function获取正确的上下文:

google.maps.event.addListener(marker, 'dragend', () => {
    this.coord = marker.getPosition().lat() + ', ' + marker.getPosition().lng(); // `this` here will point to `RegisterMapPage` instance now that you use arrow function
    console.log(this.coord); // prints perfectly here.
});