欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

ng-book札记——HTTP

程序员文章站 2022-03-18 16:03:38
Angular拥有自己的HTTP库,可以用于调用外部API。 在JavaScript世界里有三种方式可以实现异步请求,Callback,Promise与Observable。Angular倾向于使用Observable方式。 HTTP库属于Angular中独立的模块,这意味着当使用时需要导入它。 举 ......

Angular拥有自己的HTTP库,可以用于调用外部API。

在JavaScript世界里有三种方式可以实现异步请求,Callback,Promise与Observable。Angular倾向于使用Observable方式。

HTTP库属于Angular中独立的模块,这意味着当使用时需要导入它。

import {
    // The NgModule for using @angular/http
    HttpModule,

    // the class constants
    Http,
    Response,
    RequestOptions,
    Headers
} from '@angular/http';

举个基本的HTTP请求例子:

import { Component, OnInit } from '@angular/core';
import {Http, Response} from '@angular/http';

@Component({
    selector: 'app-simple-http',
    templateUrl: './simple-http.component.html'
})
export class SimpleHttpComponent implements OnInit {
    data: Object;
    loading: boolean;

    constructor(private http: Http) {
    }

    ngOnInit() {
    }

    makeRequest(): void {
        this.loading = true;
        this.http.request('http://jsonplaceholder.typicode.com/posts/1')
        .subscribe((res: Response) => {
            this.data = res.json();
            this.loading = false;
        });
    }
}

http.request返回一个Observable,通过subscribe订阅变化。

如果是想要用GET方式请求API的话,可以使用HTTP库中的http.get方法。

@Injectable()
export class YouTubeSearchService {
    constructor(private http: Http,
    @Inject(YOUTUBE_API_KEY) private apiKey: string,
    @Inject(YOUTUBE_API_URL) private apiUrl: string) {
}

    search(query: string): Observable<SearchResult[]> {
        const params: string = [
        `q=${query}`,
        `key=${this.apiKey}`,
        `part=snippet`,
        `type=video`,
        `maxResults=10`
        ].join('&');
        const queryUrl = `${this.apiUrl}?${params}`;
        return this.http.get(queryUrl)
            .map((response: Response) => {
                return (<any>response.json()).items.map(item => {
                    // console.log("raw item", item); // uncomment if you want to debug
                        return new SearchResult({
                        id: item.id.videoId,
                        title: item.snippet.title,
                        description: item.snippet.description,
                        thumbnailUrl: item.snippet.thumbnails.high.url
                });
            });
        });
    }
}

如果要用POST方式的话,也有http.post方法。

makePost(): void {
    this.loading = true;
    this.http.post(
    'http://jsonplaceholder.typicode.com/posts',
        JSON.stringify({
            body: 'bar',
            title: 'foo',
            userId: 1
        }))
        .subscribe((res: Response) => {
            this.data = res.json();
            this.loading = false;
    });
}

当然还有http.put,http.patch,http.delete以及http.head方法。