ioni c глобальная переменная с использованием - PullRequest
0 голосов
/ 11 апреля 2020

Я новичок в ioni c, поэтому я использую глобальную переменную для получения результата в service.ts, но проблема в том, что я распечатал результат как в моем ngOnit, так и в функции сервиса, я получил то, что я Я хочу использовать функцию service.ts, поэтому я думаю, что сама функция работает, но когда я печатал результаты в ngOnit, который использовал global vairable для распечатки результата, он показывал undefined , Мне стало интересно, в чем проблема?

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", Я думаю, что в этом проблема, но я не могу понять это

1 Ответ

0 голосов
/ 11 апреля 2020

Конечно, никакие данные не будут перенесены на другие страницы, так как внутри getpos () вы декальзировали let pos, поэтому она сохранит переменную в decalred pos и не будет публиковать c pos, чтобы сохранить ее в publo c pos, вам нужно сделать это изменение:

getpos(){
    this.geocoder.geocode({ 'address': "xxxxxxxxxxxxxxx" },  (results, status)  => { 
        if (status == google.maps.GeocoderStatus.OK) {
            //console.log(results[0].geometry.location.lat());
            this.pos = {
              lat: results[0].geometry.location.lat(),
              lng: results[0].geometry.location.lng()
            };
            console.log(this.pos);
            return this.pos;
        }
    });
  }

Теперь значения должны быть привязаны к publi c pos, так как мы использовали это, чтобы указывать на него вместо объявления новой переменной с именем pos.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...