1

タイトルが言うように、コードをリファクタリングしたいと思います。API 呼び出しを外部プロバイダーに入れたいときに問題があります (ある日それを使用する必要がある場合は、新しい .ts ファイルのみをインポートします)、「天気」データに到達できません。

これが私のコードです:

    import { Component } from '@angular/core';
    import { NavController, Platform } from 'ionic-angular';

     // importation des plugins
    import { Geolocation } from '@ionic-native/geolocation';
    import { OpenWeatherProvider, Weather } from '../../providers/meteo/open-weather-provider'
    import { Test } from '../test/test';
    import { Subscription } from 'rxjs/Subscription';
    import { Observable } from "rxjs/Rx"

    @Component({
      selector: 'geoloc',
      templateUrl: 'geoloc.html'
    })
    export class Geoloc {   
        public lng = 0;
        public lat = 0;
        //Observable de type Weather (classe exportée dans open-weather-provider)
        public weather;
        //public weather$: Subscription;
        public Meteo: Weather;

      constructor(public navCtrl: NavController, private geolocation: Geolocation, public platform: Platform, public OWP: OpenWeatherProvider) {
            platform.ready().then(() =>{
                  //Appel a l'initialisation
                  this.loadPosition();

            });
          }

//This is the function i would like to put into the ts.file       
        loadPosition(){
            //Appel methode coords GPS
            this.geolocation.getCurrentPosition().then((resp) => {
            this.lng = resp.coords.longitude;
            this.lat = resp.coords.latitude;
            //Reception des donnees de l'API OWP (OpenWeatherProvider)
            this.weather = this.OWP.getWeatherPerLatLng(this.lat,this.lng);
            this.weather.subscribe(data=>{

                this.Meteo=data ;

            }); // end subscribe

            });
        }

そして、これは API に使用するプロバイダーです。

import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import 'rxjs/add/operator/map';

import { Observable } from "rxjs/Rx";
import { Http, Response } from "@angular/http";


@Injectable()
export class OpenWeatherProvider {
  apikey = 'ea91a7eab8e8b73b433086eb0244fc94';
  WeatherArr: Array<String> = [];
  testWeather: Weather;

  constructor(public http: HttpClient) {

  }

  getWeatherPerLatLng(lat,lng) {
  return this.http.get<Weather>('http://api.openweathermap.org/data/2.5/weather?lat='+lat+'&lon='+lng+'&units=metric&appid='+ this.apikey);
  // this.http.get<Weather>('http://api.openweathermap.org/data/2.5/weather?lat='+lat+'&lon='+lng+'&units=metric&appid='+ this.apikey).subscribe(
  //     data => {
  //       console.log("HTTP GET PROVIDER API",data)
  //       return data;  // you should never have application logic in a provider
  //     });

  }
}

export interface Weather{
  coord: {
    lon: number,
    lat: number
  },
  weather: [
    {
      id: number,
      main: String,
      description: String,
      icon: String
    }
  ],
  base: String,
  main: {
    temp: number,
    pressure: number,
    humidity: number,
    temp_min: number,
    temp_max: number
  },
  visibility: number,
  wind: {
    speed: number,
    deg: number
  },
  clouds: {
    all: number
  },
  dt: number,
  sys: {
    type: number,
    id: number,
    message: number,
    country: String,
    sunrise: number,
    sunset: number
  },
  id: number,
  name: String,
  cod: number
}

作成したファイルに loadposition() 関数をカット アンド ペーストしましたが、そこからデータを読み取ることができません。

御時間ありがとうございます !

4

0 に答える 0