Столкнувшись с проблемой при подписке Observable на компонент в Angular 8

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

this.res.job.map не является функцией в SignupComponent.jobTitle

SignupComponent.ts:

    import { Component, OnInit } from '@angular/core';
    import { SignupService } from '../service/signup/signup.service';

    @Component({
      selector: 'app-signup',
      templateUrl: './signup.component.html',
      styleUrls: ['./signup.component.scss']
    })
    export class SignupComponent  {


     constructor(private fb: FormBuilder ,public res : SignupService ) { 
   this.jobtitle() }


    jobtitle(){
        this.res.jobTitle.map((res : Response) => res.json()).subscribe(result => {
          console.log(result);
        })
      }

    }

Сервис

     import { Injectable } from '@angular/core';
    import { observable, Observable } from 'rxjs';
    import { HttpClient } from '@angular/common/http';


    @Injectable({
      providedIn: 'root'
    })
    export class SignupService {

     constructor(public http: HttpClient) {}

  jobTitle() : Observable<any>{
     return this.http.get(this.jobTitle);
   }
    }

person Anurag Ranjan    schedule 26.09.2019    source источник
comment
https://www.techiediaries.com/angular-by-example-httpclient-get/ Вы можете следовать этому руководству   -  person Rebai Ahmed    schedule 26.09.2019


Ответы (3)


Нам не нужно сопоставлять его с помощью HttpClient

Также вы забыли добавить скобки () в функцию jobTitle() Попробуйте так:

this.res.jobTitle().subscribe(result => {
  console.log(result);
})
person Adrita Sharma    schedule 26.09.2019
comment
Я сделал то же самое, но получаю сообщение об ошибке =›››› Свойство «подписаться» не существует для типа «() => Observable‹any›». - person Anurag Ranjan; 26.09.2019
comment
Изменил ответ, будет this.res.jobTitle() - person Adrita Sharma; 26.09.2019

Привет, ошибка пытается сказать вам, что res.jobTitle не существует. Вы используете его как поле вашего Сервиса this.jobTitle, хотя его нет. Поэтому undefined.map не является функцией. В дополнение к этому map() можно вызывать только внутри pipe()

Также я не уверен, почему вы используете jobTitle в качестве входных данных для вас http.get(). Поскольку get() хочет, чтобы URL-адрес был входным, а остальная часть вашего кода была готова, как будто jobTitle должен быть вашим результирующим значением.

person Chund    schedule 26.09.2019

Для использования операторов RXJS (таких как карта, фильтр и т. д.) вам необходимо использовать метод pipe() для каждого оператора и поместить все операторы, которые вы хотели бы использовать, в метод pipe(). Таким образом, операторы не являются методами, как это было введено в RXJS 5.5.

Например:

of(1,2,3).pipe(
  map(x => x + 1),
  filter(x => x > 2)
);

Старый способ выглядел так (сейчас не работает):

of(1,2,3).map(x => x + 1).filter(x => x > 2);
person vanrado    schedule 26.09.2019