Angular 离子角未捕获(承诺)误差

Angular 离子角未捕获(承诺)误差,angular,ionic2,Angular,Ionic2,我是爱奥尼亚的新手 关于琳达的课程是我对爱奥尼亚的介绍,我一直在成功地遵循导师的指导,直到他介绍了提供商。我的提供商文件如下所示: import { HttpClient } from '@angular/common/http'; import { Injectable } from '@angular/core'; /* Generated class for the PeopleDataProvider provider. See https://angular.io/guid

我是爱奥尼亚的新手

关于琳达的课程是我对爱奥尼亚的介绍,我一直在成功地遵循导师的指导,直到他介绍了提供商。我的提供商文件如下所示:

import { HttpClient } from '@angular/common/http';
import { Injectable } from '@angular/core';

/*
  Generated class for the PeopleDataProvider provider.

  See https://angular.io/guide/dependency-injection for more info on providers
  and Angular DI.
*/
@Injectable()
export class PeopleDataProvider {

  constructor(public http: HttpClient) {
    console.log('Hello PeopleDataProvider Provider');
  }

  getPeople(){
    return this.http.get('https://randomuser.me/api/?results=10&nat=us&seed=d07ade5f51ff3011')
    .map(res => res.json())
    .map(res => res.results);
  }

}
import { Component } from '@angular/core';
import { NavController } from 'ionic-angular';

import { DetailPage } from '../detail/detail';
import { PeopleDataProvider } from '../../providers/people-data/people-data';

@Component({
  selector: 'page-home',
  templateUrl: 'home.html',
  providers: [PeopleDataProvider]
})
export class HomePage {

    public people = new Array();
    private detailPage;

  constructor(public navCtrl: NavController, public peopleData:PeopleDataProvider) {

    peopleData.getPeople().subscribe(people => {
      console.log('people',people);
      this.people = people;
    });
    this.detailPage = DetailPage;
  }

  loadDetail(person){
    console.log(person);
    this.navCtrl.push(this.detailPage, {person:person});
  }

}
我的home.ts文件如下:

import { HttpClient } from '@angular/common/http';
import { Injectable } from '@angular/core';

/*
  Generated class for the PeopleDataProvider provider.

  See https://angular.io/guide/dependency-injection for more info on providers
  and Angular DI.
*/
@Injectable()
export class PeopleDataProvider {

  constructor(public http: HttpClient) {
    console.log('Hello PeopleDataProvider Provider');
  }

  getPeople(){
    return this.http.get('https://randomuser.me/api/?results=10&nat=us&seed=d07ade5f51ff3011')
    .map(res => res.json())
    .map(res => res.results);
  }

}
import { Component } from '@angular/core';
import { NavController } from 'ionic-angular';

import { DetailPage } from '../detail/detail';
import { PeopleDataProvider } from '../../providers/people-data/people-data';

@Component({
  selector: 'page-home',
  templateUrl: 'home.html',
  providers: [PeopleDataProvider]
})
export class HomePage {

    public people = new Array();
    private detailPage;

  constructor(public navCtrl: NavController, public peopleData:PeopleDataProvider) {

    peopleData.getPeople().subscribe(people => {
      console.log('people',people);
      this.people = people;
    });
    this.detailPage = DetailPage;
  }

  loadDetail(person){
    console.log(person);
    this.navCtrl.push(this.detailPage, {person:person});
  }

}
当应用程序加载时,我收到以下错误:

打字错误

类型“Object”上不存在属性“json”

src/providers/people-data/people-data.ts

返回 this.http.get(“”) .map(res=>res.json()).map(res=>res.results)

帖子建议引入
import'rxjs/add/operator/map'作为解决方案

然而,这种导入并不能解决我的问题

额外并发症:

在对浏览器进行几次刷新后,错误变为以下异常,但我无法预测何时发生,也无法控制何时发生:

离子错误:未捕获(承诺中):错误: StaticInjectorError(AppModule)[PeopleDataProvider->HttpClient]:


我不知道这两个错误是否相关。

您不必在响应中使用
map
和调用
.json
,只有在使用旧的而不是旧的时才需要这些

所以你的方法应该是这样的

PeopleDataProvider

import 'rxjs/add/operator/map';
..
getPeople(){
    return this.http.get<any>('https://randomuser.me/api/?results=10&nat=us&seed=d07ade5f51ff3011')
    .map(res => res.results);
}

您不必在响应中使用
map
和调用
.json
,只有当您使用旧的而不是旧的时才需要这些

所以你的方法应该是这样的

PeopleDataProvider

import 'rxjs/add/operator/map';
..
getPeople(){
    return this.http.get<any>('https://randomuser.me/api/?results=10&nat=us&seed=d07ade5f51ff3011')
    .map(res => res.results);
}

因为您使用的是HttpClient,所以它的明显u使用的是Angular 4.3+。在此版本之后,已删除.map amd.json()。。 试试这个---

}

除去--


因为您使用的是HttpClient,所以它的明显u使用的是Angular 4.3+。在此版本之后,已删除.map amd.json()。。 试试这个---

}

除去--


谢谢你的详尽回答。你能告诉我可以参考的最好的资源是什么吗?它能帮助我知道哪些已经被弃用,哪些还没有被弃用?很明显,我下面的教程已经过时了。我建议您参考文档,不推荐的API会被标记,例如,检查此文档。谢谢您的详细答案。你能告诉我可以参考的最好的资源是什么吗?它能帮助我知道哪些已经被弃用,哪些还没有被弃用?很明显,我下面的教程是过时的。我建议您参考文档,不推荐的API会被标记,例如检查此文档