代码之家  ›  专栏  ›  技术社区  ›  Arun Prasad E S

角度5,离子3-【ts】类型“void”不可分配给类型“Observable<Post[]>”

  •  0
  • Arun Prasad E S  · 技术社区  · 6 年前

    enter image description here

    本教程要求我映射到JSON,我读到Angular 5不需要映射到JSON。无法获取此工作。

    GitHub <-项目文件

    import { Component } from '@angular/core';
    import { IonicPage, NavController, NavParams } from 'ionic-angular';
    import { Observer } from 'rxjs/Observer';
    import { Observable } from 'rxjs/Observable';
    import { Post } from '../../models/posts.inteface';
    import { DataProvider } from '../../providers/data/data';
    
    @IonicPage()
    @Component({
      selector: 'page-posts',
      templateUrl: 'posts.html',
    })
    export class PostsPage {
    
      posts: Observable<Array<Post>>;
    
      constructor(private data: DataProvider,
        public navCtrl: NavController, public navParams: NavParams) {
      }
    
      getPosts() {
        this.posts =  this.data.getPosts(); // Error 
      }
    }
    

    教程要求我这样写。

    enter image description here

    这是提供程序文件

    import { HttpClient } from '@angular/common/http';
    import { Injectable } from '@angular/core';
    import 'rxjs/add/operator/take';
    import 'rxjs/add/operator/map';
    /*
      Generated class for the DataProvider provider.
    
      See https://angular.io/guide/dependency-injection for more info on providers
      and Angular DI.
    */
    @Injectable()
    export class DataProvider {
    
      rootUrl : string = 'https://jsonplaceholder.typicode.com'
    
      posts:string ='posts';
    
      constructor(public http: HttpClient) {
        console.log('Hello DataProvider Provider');
      }
    
      getPosts(){
        this.http.get(`${this.rootUrl}/${this.posts}`).map(res=>res).take(1);
      }
    }
    

    更新如@Prasheel所说,仍然错误

    enter image description here

    2 回复  |  直到 6 年前
        1
  •  1
  •   Prasheel    6 年前

    如果使用的是angular 5,则无需使用贴图操作符。您只需返回如下所示的可观察值:

     getPosts(){
       return this.http.get(`${this.rootUrl}/${this.posts}`);
      }
    

    这将起作用。或者,您可以像这样显式定义返回类型:

    getPosts(): Observable<Post[]>{
           return this.http.get(`${this.rootUrl}/${this.posts}`);
          }
    
        2
  •  1
  •   Luillyfe    6 年前

    数据提供者 (您缺少返回语句。 map take 操作员什么也不做)。

    getPosts() {
       return this.http.get(`${this.rootUrl}/${this.posts}`).map(res => res).take(1);
    }
    

    使现代化

    .map(res=>res.json())
    

    这是因为教程必须是最新的, res.json() 是改变 http response 之前 HttpClientModule 发挥作用。说,你不再需要使用 地图 将答案转换为 json 总体安排 Get 请求返回一个在响应到达时完成的可观察对象,因此 take(1) 也没有必要。

    getPosts() {
      return this.http.get(`${this.rootUrl}/${this.posts}`);
    }