在Angular 8中订阅“可观察到”组件时面临的问题

时间:2019-09-26 08:16:33

标签: angular rxjs angular8 angular-httpclient angular-observable

我正在尝试通过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);
   }
    }

3 个答案:

答案 0 :(得分:3)

我们不需要使用HttpClient进行映射

您还忘记了在()函数中添加括号jobTitle() 尝试这样:

this.res.jobTitle().subscribe(result => {
  console.log(result);
})

答案 1 :(得分:1)

您好,错误是试图告诉oyu的,是res.jobTitle不存在。 尽管没有使用,但您像服务this.jobTitle的字段一样使用它。 因此undefined.map不是函数。 除此之外,map()只能在pipe()

内部调用

我也不知道您为什么要使用jobTitle作为输入http.get()。 由于get()希望将url作为输入,而其余的your代码准备就绪,就好像jobTitle应该是您得到的值。

答案 2 :(得分:0)

要使用RXJS运算符(如地图,过滤器等),您需要为每个运算符使用log_message('error :',$e->getMessage()); return;方法,并将要使用的所有运算符放在 public function add() { try { $this->db->trans_start(FALSE); $this->db->insert('users', $preparedData); // documentation at // https://www.codeigniter.com/userguide3/database/queries.html#handling-errors // says; "the error() method will return an array containing its code and message" $db_error = $this->db->error(); if (!empty($db_error)) { throw new Exception('Database error! Error Code [' . $db_error['code'] . '] Error: ' . $db_error['message']); return false; // unreachable return statement !!!`enter code here` } return TRUE; } catch (Exception $e) { // this will not catch DB related `enter code here`errors. But it will include them, because this is more general. log_message('error ',$e->getMessage()); return; } } 方法内。因此,运算符不是RXJS 5.5中引入的方法。

例如:

pipe()

旧方法看起来像这样(现在不起作用):

pipe()