Angular 角4和角5之间映射函数的作用

Angular 角4和角5之间映射函数的作用,angular,Angular,以下是我在Angular 4中编写的代码: 服务: import {Inject, Injectable} from '@angular/core' import { Http } from "@angular/http"; import 'rxjs/add/operator/map'; @Injectable() export class Service1 { constructor(private http:Http, @Inject('BASE_URL') private bas

以下是我在Angular 4中编写的代码:

服务:

import {Inject, Injectable} from '@angular/core'
import { Http } from "@angular/http";
import 'rxjs/add/operator/map';

@Injectable()
export class Service1 {
    constructor(private http:Http, @Inject('BASE_URL') private baseUrl: string) { } 

    loadData() {
        return this.http.get(this.baseUrl + 'api/Listes/').map( res => res.json());
    }
    ...
 import { HttpClient } from '@angular/common/http';
 ...
 @Injectable()
 export class Service1
 {
    constructor(private http: HttpClient, @Inject('BASE_URL') private baseUrl: string) {  }

    loadData() 
    {
       return this.http.get<Liste[]>(this.baseUrl + 'api/Lists/');
    }
组成部分:

    import { Component } from '@angular/core';
    import {Service1} from "../../services/service1.service";
    import {Liste} from "../../models/Liste";
    ...
    export class Composant1Component {
        private donnees:Liste[]

        constructor(private service1:Service1) { }

        ngOnInit()
        {
            this.service1.loadData().subscribe(res => { this.donnees = res });
        }
    }
   export class Composant1Component 
   {
        private donnees:Liste[];

        constructor(private service1:Service1) { }

        ngOnInit()
        {
            this.service1.loadData().subscribe(res => { this.donnees = res });
        }
   ...
现在,看看角度5的区别:

服务:

import {Inject, Injectable} from '@angular/core'
import { Http } from "@angular/http";
import 'rxjs/add/operator/map';

@Injectable()
export class Service1 {
    constructor(private http:Http, @Inject('BASE_URL') private baseUrl: string) { } 

    loadData() {
        return this.http.get(this.baseUrl + 'api/Listes/').map( res => res.json());
    }
    ...
 import { HttpClient } from '@angular/common/http';
 ...
 @Injectable()
 export class Service1
 {
    constructor(private http: HttpClient, @Inject('BASE_URL') private baseUrl: string) {  }

    loadData() 
    {
       return this.http.get<Liste[]>(this.baseUrl + 'api/Lists/');
    }
我不明白map()函数之前的确切作用是什么。为什么在Angular 5中不需要这个调用?HttpClient和Http都返回一个可观察的,不是吗


感谢

Angular在其第四个版本中集成了一个新的HTTP调用API,名为
HttpClient

旧版本被称为
Http

在旧的API中,必须使用名为
json()
的内部函数转换答案,该函数用于
将响应映射到可读对象。这就是为什么你使用地图


在新的API中,他们看到大部分时间只返回响应。因此,他们决定放弃旧的
json
调用,直接返回响应的内容。但别担心,您仍然可以看到您提出的请求的其他部分。这不再是默认行为

我确信它的行为在4和5之间没有区别。问题一定是您正在调用的URL(
this.http.get(this.baseUrl+'api/Listes/')
)是否检查了浏览器控制台的错误?1。
map
是获取响应并提取JSON,因此
res.JSON()
。2.现在不需要了,因为
HttpClient
Http
不同,默认情况下提取JSON;看见它们都返回可观察的,是的,但默认情况下是不同的。我在介绍新客户机时写了一篇博客文章,可能有用:谢谢,但是如果我的服务不是返回json,而是返回一个原始二进制文件(例如),会发生什么情况呢?在这种情况下,你可以,他们会解释你需要了解的关于阅读完整响应的所有信息!