Создайте метод в Angular 4 с вызовом http и обработайте ответ - PullRequest
0 голосов
/ 26 апреля 2018

У меня есть класс провайдера с функцией запроса. Работает нормально:

sendRequest(requestBody:any,URL:string){
    let headers = new Headers();
    headers.append("Accept", 'application/json');
    headers.append('Content-Type', 'application/json' );
    let options = new RequestOptions({ headers: headers });

    let body=requestBody;
    body.key=this.key;

    this.http.post(this.url+URL, body, options)
      .subscribe(data => {
        let json=JSON.parse(data['_body']);

          let toast=this.toast.create({
            message:json.response,
            duration:3000,
            position:'top'
          });
          toast.present();
          return json;
      }, error => {
        console.log(error);// Error getting the data
      });
  }

Я хочу вызвать этот метод и получить ответ json в другом классе. Я пытался позвонить в обещании, но не получилось. Любая помощь будет принята с благодарностью.

Edit: Я хочу выполнить toast так же, как пытался вернуть this.http.post ... он возвращает объект подписки. Как я могу получить данные JSON из этого?

** Правка № 2 ** Я успешно вернул данные, используя карту по определению и подписавшись на стороне вызова.

return this.http.post(this.url+URL, body, options)
      .map((data) => {
        let json=JSON.parse(data['_body']);

          let toast=this.toast.create({
            message:json.response,
            duration:3000,
            position:'top'
          });
          toast.present();
          return json;
      }

и вызывается с помощью

this.request.sendRequest(requestBody,'api/login').subscribe((data)=>{
      console.log(data);
    });

Тост тоже работает.

решаемые

1 Ответ

0 голосов
/ 26 апреля 2018

Если ваша цель - добавить заголовки и отобразить toatser, рассмотрите возможность использования перехватчика из нового модуля Http Client :

intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {

  let headers = new Headers();
  headers.append("Accept", 'application/json');
  headers.append('Content-Type', 'application/json' );
  let options = new RequestOptions({ headers: headers });

  const clone = req.clone({ setHeaders: headers });

  return next
    .handle(clone || req)
    .map(response => {
      this.toast.create(...);
      return response;
    });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...