在 Angular 8 中将 Observable 订阅到组件时遇到问题
Facing problem in Subscribing Observable to component in Angular 8
我正在尝试通过 httpclient 获取数据,为此我使用了 Observable ,并尝试将该 Observable 订阅到组件
这样做我收到错误
this.res.job.map is not a function
at 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);
}
}
我们不需要使用 HttpClient 映射它
你还忘了在 jobTitle()
函数中添加括号 ()
像这样尝试:
this.res.jobTitle().subscribe(result => {
console.log(result);
})
为了使用 RXJS 运算符(如 map、filter 等...),您需要为每个运算符使用 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);
您好,错误试图告诉 oyu,res.jobTitle
不存在。
尽管有 none,但您将其用作服务 this.jobTitle
的字段。
因此 undefined.map
不是函数。
除此之外 map()
只能在 pipe()
中调用
此外,我不确定您为什么使用 jobTitle 作为输入 http.get()
。
由于 get()
需要一个 url 作为输入,并且您的其余代码已准备就绪,就好像 jobTitle 应该是您的结果值一样。
我正在尝试通过 httpclient 获取数据,为此我使用了 Observable ,并尝试将该 Observable 订阅到组件 这样做我收到错误
this.res.job.map is not a function at 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);
}
}
我们不需要使用 HttpClient 映射它
你还忘了在 jobTitle()
函数中添加括号 ()
像这样尝试:
this.res.jobTitle().subscribe(result => {
console.log(result);
})
为了使用 RXJS 运算符(如 map、filter 等...),您需要为每个运算符使用 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);
您好,错误试图告诉 oyu,res.jobTitle
不存在。
尽管有 none,但您将其用作服务 this.jobTitle
的字段。
因此 undefined.map
不是函数。
除此之外 map()
只能在 pipe()
此外,我不确定您为什么使用 jobTitle 作为输入 http.get()
。
由于 get()
需要一个 url 作为输入,并且您的其余代码已准备就绪,就好像 jobTitle 应该是您的结果值一样。