错误:类型“可观察<对象>”上不存在属性“映射”

时间:2020-10-04 12:45:02

标签: angular rxjs

在我的Angular10项目中,即使我import 'rxjs/operator/map';import { map } from 'rxjs/operators';

服务代码为

import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { map, filter, scan } from 'rxjs/operators';
import 'rxjs/add/operator/map';

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

  constructor( private http: HttpClient) { }

  getAllPosts(){
    return this.http.get('/posts').map((posts) => {
      return posts;
    });
  }
}

如何克服此错误?我的rxjs版本高于6,角度版本为10。

2 个答案:

答案 0 :(得分:1)

Http调用是异步的。

在有角度的此类调用中,返回一个Observble,这将使值结果可通过回调而不是直接访问

可观察对象实际上没有“地图”操作。

您可以做的是pipe(map(..))来转换值。但是我假设,如果您调用“ getAllPosts()”,您希望将Posts接收为“纯”值。

映射用于转换某些值并更改“可观察的”结果数据。

我会考虑以下方法:


   import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { map, filter, scan } from 'rxjs/operators';
import 'rxjs/add/operator/map';

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

  constructor( private http: HttpClient) { }

  getAllPosts(): Observable<Posts[]>{
    return this.http.get('/posts');
  }
}

以及调用Authservice的组件:


export class AnyComponent impments OnInit{

  constructor( private auth:AuthService) { }

  public posts: Posts[] = [];

  ngOnInit(){
    auth.getAllPosts().subscribe( (_posts:Post[] => this.posts = _posts);
  }
}

我对您要完成的工作做了一些假设。

答案 1 :(得分:1)

您必须通过管道传输操作员。 来自the docs

请注意,对于Angular应用,我们更喜欢将运算符与管道结合使用,而不是链接。许多RxJS示例中都使用了链接。

尝试:

return this.http.get('/posts').pipe(
    map((posts) => {return posts; }),
);