从提供者功能获取价值到另一页

时间:2018-03-28 08:39:11

标签: javascript angular typescript ionic-framework

我正在尝试将我的提供程序中找到的函数的结果导入我的应用程序中的另一个页面。在这种情况下,结果是" cityname"。当控制台注销响应时,我得到一个未定义的内容。

位置提供商ts

  getLocation(cityname) {
      this.options = {
      enableHighAccuracy: false
  };
  return this.geolocation.getCurrentPosition(this.options).then((pos: Geoposition) => {
    var geocoder = new google.maps.Geocoder;
    var latlng = new google.maps.LatLng(pos.coords.latitude, pos.coords.longitude);
    geocoder.geocode({'location': latlng}, function(results, status) {
        if (status === google.maps.GeocoderStatus.OK) {
          if (results[1]) {
            var cityname = results[1].formatted_address;
            return cityname;
          } else {
            console.log('No results found');
          }
        } else {
          console.log('Geocoder failed due to: ' + status);
        }
      });
  }, (err: PositionError) => {
      console.log("error : " + err.message);
  }) 
  }

另一页

import { LocationProvider } from './../../../../providers/location/location';

  constructor(public navCtrl: NavController, public navParams: NavParams, public storage: Storage, private location: LocationProvider) {}

  ionViewWillEnter() {

       this.location.getLocation().then((data) =>{
         console.log(data);
       });

  }  

任何想法我做错了什么。目的是让城市名称在我的pp的其他部分重复使用

2 个答案:

答案 0 :(得分:1)

你的代码目前没有意义:

  1. 您未在cityname实施
  2. 中使用变量getLocation
  3. 签名getLocation()(位于another page)和getLocation(cityname)(位于location provider
  4. 之间存在不匹配
  5. Google Maps API可让您访问回调而非承诺。正如现在所写,您的方法会返回任何内容。您必须按照Promises With Google Maps Geocoder API
  6. 中的说明将回调转换为承诺

    我建议您通过清理一下来解决问题:

    位置提供商

    getLocation() { // remove cityname from the signature, it is not used anyway
          this.options = {
          enableHighAccuracy: false
      };
      return this.geolocation.getCurrentPosition(this.options).then((pos: Geoposition) => {
        var geocoder = new google.maps.Geocoder;
        var latlng = new google.maps.LatLng(pos.coords.latitude, pos.coords.longitude);
    
        return new Promise(function(resolve, reject) {
            geocoder.geocode({'location': latlng}, function(results, status) {
                if (status === google.maps.GeocoderStatus.OK) {
                   if (results[1]) {
                       var cityname = results[1].formatted_address;
                       resolve(cityname)
                   } else {
                       reject('No results found');
                   }
                 } else {
                     reject('Geocoder failed due to: ' + status);
                 }
          });
        })
      }
    

答案 1 :(得分:0)

您的代码中可能还有其他问题,但我注意到的第一件事是another page在没有参数的情况下调用getLocation(),而函数被定义为将cityname作为参数。