2017-03-25 7 views
0

저는 앱을 만들고 이벤트 공급자를 설정하고 있습니다. Eventbrite API를 사용하여 한 도시에서 발생하는 이벤트 풀을 얻습니다. get 요청을 실행하고 변수에 저장하는 방법을 찾는 데 어려움이 있습니다.이오닉 2 : http GET 요청의 응답 저장

https://www.eventbriteapi.com/v3/events/search/?location.address=Atlanta&expand=organizer,venue&token={MY_TOKEN} 

여기에 지금까지 내 업체입니다 : 다음은 요청의 URL이

import { Injectable } from '@angular/core'; 
import { Http } from '@angular/http'; 
import {NativeStorage} from "ionic-native"; 
import 'rxjs/add/operator/map'; 

/* 
    Generated class for the EventProvider provider. 

    See https://angular.io/docs/ts/latest/guide/dependency-injection.html 
    for more info on providers and Angular 2 DI. 
*/ 
@Injectable() 
export class EventProvider { 
    data:any; 
    constructor(public http: Http) { 
    this.data = null; 
    //console.log('Hello EventProvider Provider'); 
    } 

    public getCityEvents(city) { 
    var event = {id: "", name: "", start: "", end: "", latitude: "", longitude: "", venue:""}; 
    NativeStorage.getItem('event') 
     .then(function (data) { 
     alert("data: " + JSON.stringify(data)); 
     alert("data id: " + data.id); 

     event = { 
      id = data.id, 
      name = data.name, 
      start = data.start, 
      end = data.end, 
      latitude = data.latitude, 
      longitude = data.longitude, 
      venue = data.venue 
     }; 


     this.http.get("https://www.eventbriteapi.com/v3/events/search/?location.address=Atlanta&expand=organizer,venue&token=VMGQGYQUIO3IKNS75BD4").subscribe(data =>{ 
     console.log(data); 
     }, 
     error => { 
     console.log(error) 
     }); 
     }) 
    } 

} 

단순히 지금의 변수이 얻을 요청에서 JSON 응답을 저장할. 누군가 도움을 청할 수 있습니까?

+0

'this.data = event'가해야하는 것은 아니지만'function' 표현식 대신 '(params) => expression 또는 block'화살표 함수를 사용해야합니다. 사용할 수있는 변압기가없는 경우이를 클로저 외부의 임시 변수에 별칭을 지정하고 클로저 내부에서 참조하십시오. 이 참조는'function' 내부에서 동적으로 범위가 지정됩니다. –

+0

미안하지만 이해가되지 않습니다. 브라우저에서 URL을 입력 할 때 원하는 응답을 얻고 있지만 실제로 가지고있는 것이 맞는지 확실하지 않습니다. 내가 정의한 이벤트 변수에는 JSON에서 나가고 싶은 최종 데이터 필드가 포함되어 있지만 JSON 응답에도 많은 다른 필드가 있습니다. 게시 한 코드 측면에서 솔루션에 대해 자세히 설명해 주시겠습니까? – wc01127

+0

그냥 Ajai Jothi의 대답이나 내 의견에 접근하기를 시도하십시오 –

답변

-1

함수

getData() { 
return this.http.get("https://www.eventbriteapi.com/v3/events/search/?location.address=Atlanta&expand=organizer,venue&token=VMGQGYQUIO3IKNS75BD4") 
        .map(this.extractData) 
        .catch(this.handleError); 
    } 


    private extractData(res: Response) { 
let body = res.json(); 
return body.data || { }; 
    } 

다음
this.getData() 
        .subscribe(
         data => console.log(data); 
         error => console.log(error)); 
    } 

이 GET은 우체부에서 작동 angular docs를 참조 구독을 만들 수 있습니다.

+0

언 바운드 방식을 전달하면 문제가 해결됩니다. OP와 관련된 문제는 'this'에 대한 어휘 적 클로저와 관련이 있습니다. 반대로, 당신은 제안 된 패턴으로 실수를 전파합니다. 이와 같은 메서드를 전달하는 것은 관계없이 절대적으로 끔찍한 코딩 방법입니다. 그들이 잘못되었을 때 각도 Doc를 모방하는 것은 단지 무의미합니다. –

1

NativeStorage.getItem('event').then((data) => { ... }에 arrow 기능을 사용하고 http 콜백 내에 실제 컨텍스트 this에 액세스 할 수 있습니다.

import { Injectable } from '@angular/core'; 
import { Http } from '@angular/http'; 
import {NativeStorage} from "ionic-native"; 
import 'rxjs/add/operator/map'; 

/* 
    Generated class for the EventProvider provider. 

    See https://angular.io/docs/ts/latest/guide/dependency-injection.html 
    for more info on providers and Angular 2 DI. 
*/ 
@Injectable() 
export class EventProvider { 
    data:any; 
    constructor(public http: Http) { 
    this.data = null; 
    //console.log('Hello EventProvider Provider'); 
    } 

    public getCityEvents(city) { 
    var event = {id: "", name: "", start: "", end: "", latitude: "", longitude: "", venue:""}; 
    NativeStorage.getItem('event') 
     .then((data) => { 
     alert("data: " + JSON.stringify(data)); 
     alert("data id: " + data.id); 

     event = { 
      id = data.id, 
      name = data.name, 
      start = data.start, 
      end = data.end, 
      latitude = data.latitude, 
      longitude = data.longitude, 
      venue = data.venue 
     }; 


     this.http.get("https://www.eventbriteapi.com/v3/events/search/?location.address=Atlanta&expand=organizer,venue&token=VMGQGYQUIO3IKNS75BD4").subscribe(data =>{ 
     console.log(data); 
     //variable assignment 
     this.data = data; 
     }, 
     error => { 
     console.log(error) 
     }); 
     }) 
    }