这在javascript函数中变为null

时间:2017-12-12 05:22:05

标签: javascript angular typescript ecmascript-6

我有java脚本函数,它给当前lat长的内部函数发出一个http post调用,就像这个“this.http.post”但函数内部的null值

我的代码

ngOnInit(): void {
    if (navigator.geolocation) {
      navigator.geolocation.getCurrentPosition(function(p) {
          var LatLng = new google.maps.LatLng(p.coords.latitude, p.coords.longitude);
          console.log(p.coords.latitude);
          console.log(p.coords.longitude);
          var dataObj = {
            latitude: p.coords.latitude,
            longitude: p.coords.longitude
          };
          this.http.post('https://XXXXX/datacenteres.php', {
              dataObj
            })
            .subscribe(
              res => {
                console.log(res);
              },
              err => {
                console.log("Error occured");
              }
            );
        }
      }
    }

我在控制台中收到此错误“无法读取属性'http'的null”。

内部navigator.geolocation.getCurrentPosition(function(p){this is null}

在If语句中,我能够获得“this”。

3 个答案:

答案 0 :(得分:3)

您可以使用如下箭头功能:

if (navigator.geolocation) {
      navigator.geolocation.getCurrentPosition(p => {
        //var LatLng = new google.maps.LatLng(p.coords.latitude, p.coords.longitude);
        console.log(p.coords.latitude);
        console.log(p.coords.longitude);
        var dataObj = {
          latitude :p.coords.latitude,
          longitude:p.coords.longitude
        };
        this.http.post('https://XXXXX/datacenteres.php', {
          dataObj
        })
          .subscribe(
            res => {
              console.log(res);
            },
            err => {
              console.log("Error occured");
            }
          );
      })
    }

答案 1 :(得分:2)

试试这样:

使用函数的.bind(this)结尾

ngOnInit(): void {
    if (navigator.geolocation) {
        navigator.geolocation.getCurrentPosition(function(p) {
            var LatLng = new google.maps.LatLng(p.coords.latitude, p.coords.longitude);

            console.log(p.coords.latitude);
            console.log(p.coords.longitude);

            var dataObj = {
                latitude: p.coords.latitude,
                longitude: p.coords.longitude
            };
            this.http.post('https://XXXXX/datacenteres.php', {
                dataObj
            }).subscribe(res => {
                console.log(res);
            }, err => {
                console.log("Error occured");
            });
        }.bind(this));

    }
}

答案 2 :(得分:1)

只需将this存储到变量中,然后在回调函数中使用它。它'非常方便

ngOnInit():void {
var self = this;
if (navigator.geolocation) {
      navigator.geolocation.getCurrentPosition(function (p) {
          var LatLng = new google.maps.LatLng(p.coords.latitude, p.coords.longitude);

          console.log(p.coords.latitude);
          console.log(p.coords.longitude);

            var dataObj = {
                latitude :p.coords.latitude,
                longitude:p.coords.longitude
                        };
          self.http.post('https://XXXXX/datacenteres.php', {
    dataObj
    })
      .subscribe(
        res => {
          console.log(res);
        },
        err => {
          console.log("Error occured");
        }
      );

  }
  }

}