이 프레임 워크를 배우기 위해 각도 2를 사용하여 간단한 날씨 앱을 만들고 싶습니다.각도 구성 요소를 사용하여 API에서 기상 데이터를 가져올 수 없습니다.
저는 GraphsComponent를 가지고 있는데, 여기서 온도 차트를 그릴 것입니다.
import { Injectable } from '@angular/core';
@Injectable()
export class WeatherAPIService {
weatherData = {};
cityName: string = "";
getWeatherHelper (city: string) {
var locationData = new Object();
$.get("https://maps.googleapis.com/maps/api/geocode/json?address=" + city, function (data) {
locationData['latitude'] = data.results[0].geometry.location.lat; //latitude
locationData['longitude'] = data.results[0].geometry.location.lng; //longitude
$.ajax({
url: "https://api.darksky.net/forecast/[MyAPIKey]/" + locationData['latitude'] + ',' + locationData['longitude'],
dataType: "jsonp",
success: function (data) {
//alert("The temperatute in " + city + " is " + data.currently.temperature);
this.weatherData = data;
this.cityName = city;
console.log(data); //good data
return data;
}
});
}
}
getWeather(city: string): Promise<string[]> {
return Promise.resolve(this.getWeatherHelper(city));
}
}
내가 날씨 데이터를 표시 할 싶어 :
import { Component, OnInit } from '@angular/core';
import { WeatherAPIService } from './weatherAPI.service';
@Component({
selector: 'my-graphs',
template: '<h1>Charts for {{this.weatherAPIService.cityName}}</h1>',
providers: [WeatherAPIService]
})
export class GraphsComponent implements OnInit {
weatherData = {};
cityName: string = "";
constructor(
private weatherAPIService: WeatherAPIService,
) { }
ngOnInit(): void {
this.weatherAPIService.getWeather("London").then(data => this.weatherData = data);
console.log(this.weatherData); //wrong data
}
}
은 또한 기상 데이터를 제공하는 WeatherAPIService을 보유하고 있습니다. getWeatherFunction에서
, 나는이 API를 사용 - 구글 지오 코딩 내가 날씨 원하는 도시의 위도와 경도를 얻을 - DarkSky 날씨를 얻을 수를문제는이다 (이것은 위도와 경도를 필요) 사실 API에서 위치와 날씨를 가져 오는 것은 비동기식이므로 데이터가 반환되기 전에 getWeatherHelper()가 완료됩니다.
WeatherAPIService에서 weatherData와 cityName을 추가 한 이유는 API의 데이터가 반환 된 후에도 이러한 변수에 적절한 데이터가 있지만 cityName이 GraphsComponent의 템플릿에 표시되지 않기 때문입니다. 왜 그런가요? 이런 상황을 어떻게 처리해야합니까? 날씨 API의 정보는 실제로 어디에 저장해야합니까? 구성 요소 또는 서비스에서?
볼 수 있듯이 양식 API를 수집 한 후에 데이터를 가져올 것이라고 생각했기 때문에 약속을 사용했지만 실제로는 사용하지 않았습니다.
아마 눈치 챘을 때, 나는 정말 새기다. 이해할 수있는 방식으로 대답 해주십시오. 나는 공식 2 각본 ("영웅의 여행")에서 배웠던만큼 많이 알고 있습니다.
니스, 지금은 볼
그래서 그 대신 당신이 인라인 함수가 필요합니다 곳마다 lambda를 사용
시작을 사용하여 표시된 도시의 이름. – Loreno
굉장! 그건 그렇고, 데이터를 검색하는 장소가 단 한 곳이라면 서비스에 저장하는 것이 좋습니다. 그러나 더 많은 장소가 있다면 약간의 리팩터링이 필요할 수도 있습니다. – rinukkusu