使用的离子全局变量

问题描述 投票:0回答:1

我是ionic的新手,所以我正在使用全局变量在service.ts中获取结果,但是问题是我在ngOnit和service的函数中都优先显示结果,在service.ts的函数中得到了想要的结果,因此我认为该函数本身可以工作,但是当我在ngOnit中使用全局vairable打印结果时,显示未定义,我想知道是什么问题?

export class OutcomePage implements OnInit {
 data: any;
 map;
 userlat;
 userlng;
 public placelat;
 public placelng;
 public pos;
 public userpos;
 constructor(private route: ActivatedRoute, private router: Router ,private zone: NgZone,private geolocation: Geolocation , private service : ControllerserviceService) { 
   this.route.queryParams.subscribe(param=>{
     if(param && param.special){
       this.data = JSON.parse(param.special);
     }
   });
 }
ngOnInit(): void{
    this.pos = this.service.getdistance();
    //console.log(this.userlat);
    this.userpos = this.service.getpos();
    console.log(this.pos);
    console.log(this.userpos)
  }
getpos(){
    this.geocoder.geocode({ 'address': "xxxxxxxxxxxxxxx" },  (results, status)  => { 
      let pos;
        if (status == google.maps.GeocoderStatus.OK) {
            //console.log(results[0].geometry.location.lat());
            pos = {
              lat: results[0].geometry.location.lat(),
              lng: results[0].geometry.location.lng()
            };
            console.log(pos);
            return pos;
        }
    });
  }

经过几次测试,我将问题缩小到此代码测试

getdistance(){
    this.geolocation.getCurrentPosition().then((resp) => {
      this.userpos = {
        lat: resp.coords.latitude,
        lng: resp.coords.longitude
      };
      console.log(this.userpos);
      //console.log(google.maps.geometry.spherical.computeDistanceBetween(new google.maps.LatLng(userpos.lat, userpos.lng), new google.maps.LatLng(this.pos)));   
      //console.log(resp.coords.latitude);
    })
    console.log(this.userpos);
    return this.userpos;
  }

所以第一个控制台日志显示了我想要的确切结果,但是第二个控制台日志显示了“ undefined”,我认为这是问题所在,但我无法弄清楚]]

我是ionic的新手,所以我正在使用全局变量在service.ts中获取结果,但是问题是我在ngOnit和service的函数中都优先显示结果,我得到了我想要的...

global-variables ionic4
1个回答
0
投票

请确保没有数据会传输到其他页面,因为在getpos()中您对let pos进行了标定,因此它将变量保存在已标定的pos中,而不是公共pos中,为了将其保存在publoc pos中,您需要执行以下操作此更改:

© www.soinside.com 2019 - 2024. All rights reserved.