Angular 地理位置:错误类型错误:无法将属性“lat”设置为null

Angular 地理位置:错误类型错误:无法将属性“lat”设置为null,angular,typescript,geolocation,typeerror,angular9,Angular,Typescript,Geolocation,Typeerror,Angular9,导言 我正在开发一个角度应用程序,其中我希望获得用户的当前位置,并在两个属性lng和lat中保存长度和高度,但无论我如何尝试,这似乎都不起作用;我不断得到错误TypeError:无法将属性“lat”设置为null 键入相关部分的脚本代码 错误被抛出到setValues的第一行 getCurrentPosition返回的JSON对象的相关部分 我试过的 JSON很受欢迎,我可以打印它,也可以打印它的子对象。我甚至可以将它绑定到setValues方法中的局部变量。我还尝试将该局部变量绑定到属性,但这

导言

我正在开发一个角度应用程序,其中我希望获得用户的当前位置,并在两个属性lng和lat中保存长度和高度,但无论我如何尝试,这似乎都不起作用;我不断得到错误TypeError:无法将属性“lat”设置为null

键入相关部分的脚本代码

错误被抛出到setValues的第一行

getCurrentPosition返回的JSON对象的相关部分

我试过的

JSON很受欢迎,我可以打印它,也可以打印它的子对象。我甚至可以将它绑定到setValues方法中的局部变量。我还尝试将该局部变量绑定到属性,但这导致了相同的错误。 将lat:any更改为lat:number或在其前面添加public。 清除setValues方法中的null运算符。 将代码放入ngOnInit方法中。
所有这些尝试都导致了相同的错误。

我不能100%确定问题出在哪里,但这与作用域有关,通过创建匿名回调函数,它似乎可以正常工作


  constructor() {
    if (navigator.geolocation) {
      navigator.geolocation.getCurrentPosition((values) => { 
        this.lat = values?.coords?.latitude
        this.lng = values?.coords?.longitude;
      });
    }
   }

您可以使您的函数匿名:

  setValues = (values) => {
    this.lat = values?.coords?.latitude
    this.lng = values?.coords?.longitude;
  }

问题在于它在不同范围内所指的内容。在这种情况下,当您使用箭头函数时,它仅指组件的外部范围。否则,这是指功能本身

通过设置以下测试,您可以亲自看到它的运行:

恩戈尼特{ //1.委托职能 this.getvalues this.setValues; //2.函数{} 此文件为.getValuesfunctionvalues{ console.logthis; }; //3.箭头功能 this.getValuesvalues=>this.setValuesvalues; } GetValueScalBack:values=>void{ 回拨{ 拉丁语:1, 长:2 }; } 设置值值{ console.logthis; } 这显示了作为回调传入函数的3种不同方式。1.二,。将未定义的日志记录到控制台。3.将在我的演示中记录包含类AppComponent

演示:


  constructor() {
    if (navigator.geolocation) {
      navigator.geolocation.getCurrentPosition((values) => { 
        this.lat = values?.coords?.latitude
        this.lng = values?.coords?.longitude;
      });
    }
   }
  setValues = (values) => {
    this.lat = values?.coords?.latitude
    this.lng = values?.coords?.longitude;
  }