タイトルが言うように、コードをリファクタリングしたいと思います。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() 関数をカット アンド ペーストしましたが、そこからデータを読み取ることができません。
御時間ありがとうございます !