angular 4 http 之web api 服务

Angular Http是获取和保存数据的。主要是为了取到我json文件里的数据。

直接上代码吧:

1.  先介绍Promise模式的:(直接代码)

heroes.json:


1

2

3

4

5

6

7

8

{

  "data": [

    { "id": 1, "name": "Windstorm" },

    { "id": 2, "name": "Bombasto" },

    { "id": 3, "name": "Magneta" },

    { "id": 4, "name": "Tornado" }

  ]

}

http肯定是要有服务的,下面先看service的代码: hero.service.promise.ts:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

import { Injectable } from ‘@angular/core‘;

import { Http, Response }          from ‘@angular/http‘;

import { Headers, RequestOptions } from ‘@angular/http‘;

import ‘rxjs/add/operator/toPromise‘;

import { Hero } from ‘./hero‘;

@Injectable()

export class HeroService {

//注意这里的路径,找的是app文件下的heroes.json文件

  private heroesUrl = ‘app/heroes.json‘;

  constructor (private http: Http) {}

  getHeroes (): Promise<Hero[]> {

    console.log(this.heroesUrl);

    return this.http.get(this.heroesUrl)

                    .toPromise()

                    .then(this.extractData)

                    .catch(this.handleError);

  }

  private extractData(res: Response) {

    let body = res.json();

    return body.data || { };

  }

  private handleError (error: Response | any) {

    let errMsg: string;

    if (error instanceof Response) {

      const body = error.json() || ‘‘;

      const err = body.error || JSON.stringify(body);

      errMsg = `${error.status} - ${error.statusText || ‘‘} ${err}`;

    } else {

      errMsg = error.message ? error.message : error.toString();

    }

    console.error(errMsg);

    return Promise.reject(errMsg);

  }

}

主要是提供了一个getHeroes ()方法:下面看hero.component.promise.ts里面怎么用呢:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

import { Component, OnInit } from ‘@angular/core‘;

import { Hero }              from ‘./hero‘;

import { HeroService }       from ‘./hero.service.promise‘;

@Component({

  selector: ‘hero-list-promise‘,

  templateUrl: ‘./hero-list.component.html‘,

  providers: [ HeroService ],

  styles: [‘.error {color:red;}‘]

})

export class HeroListPromiseComponent implements OnInit {

  errorMessage: string;

  heroes: Hero[];

  mode = ‘Promise‘;

  constructor (private heroService: HeroService) {}

  ngOnInit() { this.getHeroes(); }

  getHeroes() {

    this.heroService.getHeroes()

                     .then(

                       heroes => this.heroes = heroes,

                       error =>  this.errorMessage = <any>error);

  }

}

当然得定义一个hero.ts类:

1

2

3

4

5

export class Hero {

  constructor(

    public id: number,

    public name: string) { }

}

接下来看一下我们的hero.compoennt.html写什么呢?


1

2

3

4

5

<h1>Tour of Heroes ({{mode}})</h1>

<h3>Heroes:</h3>

<ul>

  <li *ngFor="let hero of heroes">{{hero.name}}</li>

</ul>

就是这么简单。

然后我们在app.compoennt.ts里面引入我们的标签:

1

<hero-list-promise></hero-list-promise>

现在最关键的就是在Module.ts中如何配置

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

import { NgModule }      from ‘@angular/core‘;

import { BrowserModule } from ‘@angular/platform-browser‘;

import { FormsModule }   from ‘@angular/forms‘;

import { HttpModule, JsonpModule } from ‘@angular/http‘;

import { AppComponent }             from ‘./app.component‘;

import { HeroListComponent }        from ‘./toh/hero-list.component‘;

import { HeroListPromiseComponent } from ‘./toh/hero-list.component.promise‘;

@NgModule({

  imports: [

    BrowserModule,

    FormsModule,

    HttpModule,

    JsonpModule,

  ],

  declarations: [

    AppComponent,

    HeroListPromiseComponent,

  ],

  bootstrap: [ AppComponent ]

})

export class AppModule {}

最简单和平常的配置,和往常一样。

2.第二种是web api形式。有一个文件hero-data.ts(这里就不需要heroes.json文件了)

1

2

3

4

5

6

7

8

9

10

11

12

import { InMemoryDbService } from ‘angular-in-memory-web-api‘;

export class HeroData implements InMemoryDbService {

  createDb() {

    let heroes = [

      { id: 1, name: ‘Windstorm‘ },

      { id: 2, name: ‘Bombasto‘ },

      { id: 3, name: ‘Magneta‘ },

      { id: 4, name: ‘Tornado‘ }

    ];

    return {heroes};

  }

}

module.ts需要这样配置:加上:

1

2

3

4

5

import { InMemoryWebApiModule }     from ‘angular-in-memory-web-api‘;

import { HeroData }                 from ‘./hero-data‘;

imports:[

 InMemoryWebApiModule.forRoot(HeroData);

]

hero.service.promise.ts里面需要修改下路径就可以。这要修改服务即可,其他的代码勿改动。

1

private heroesUrl = ‘api/heroes‘;

这里已经和heroes.json是没有任何关系了。api是指web api在module.ts里面配置的。angular-in-memory-web-apiheroes是hero-data.ts 里面return 回来的heroes。这两种得到的结果其实是一样的。下面说说Observable模式的: 使用都是一样的。只是服务里的这处代码不一样:  promise模式:

1

2

3

4

5

6

7

getHeroes (): Promise<Hero[]> {

  console.log(this.heroesUrl);

  return this.http.get(this.heroesUrl)

                  .toPromise()

                  .then(this.extractData)

                  .catch(this.handleError);

}

引入的包是这几个:


1

import ‘rxjs/add/operator/toPromise‘;

而Observable模式是这样算的:


1

2

3

4

5

getHeroes(): Observable<Hero[]> {

  return this.http.get(this.heroesUrl)

                  .map(this.extractData)

                  .catch(this.handleError);

}

引入:

1

2

3

import { Observable } from ‘rxjs/Observable‘;

import ‘rxjs/add/operator/catch‘;

import ‘rxjs/add/operator/map‘;

然后就一样了
实际证明直接取Json数据比用web api 快多了
时间: 2024-10-06 14:57:18

angular 4 http 之web api 服务的相关文章

延迟调用或多次调用第三方的Web API服务

当我们调用第三方的Web API服务的时候,不一定每次都是成功的.这时候,我们可能会再多尝试几次,也有可能延迟一段时间再去尝试调用服务. Task的静态方法Delay允许我们延迟执行某个Task,此方法可以让我们做到延迟一段时间再去调用服务:多尝试几次调用如何实现呢?可以用循环遍历. 在"使用HttpClient对ASP.NET Web API服务实现增删改查"中,创建了一个ASP.NET Web API项目,本篇沿用此Web API服务. 在ASP.NET Web API项目的同一个

演示如何在 WebForm 中提供 web api 服务

Global.asax.cs using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Routing; using System.Web.Security; using System.Web.SessionState; using System.Web.Http; namespace WebApiWebFormHost { public class

使用HttpClient对ASP.NET Web API服务实现增删改查

本篇体验使用HttpClient对ASP.NET Web API服务实现增删改查. 创建ASP.NET Web API项目 新建项目,选择"ASP.NET MVC 4 Web应用程序". 选择"Web API". 在Models文件夹下创建Product类. public class Product { public int Id { get; set; } public string Name { get; set; } public string Categor

使用HttpClient消费ASP.NET Web API服务

本篇体验使用HttpClient消费ASP.NET Web API服务,例子比较简单. 依次点击"文件","新建","项目". 选择"ASP.NET Web API"项目. 在Models文件夹下创建Person.cs类. public class Person { public int Id { get; set; } public string FirstName { get; set; } public string L

使用 West Wind WebSurge 对 ASP.NET Web API 服务进行压力测试

West Wind Web Surge (以下简称 WebSurge) 不只是用于 ASP.NET Web API 的压力测试功能,也可以对 ASP.NET MVC, ASP.NET WebForm 或是其他网站应用服务进行简单的压力测试,而 Load Testing 也仅是 WebSurge 其中的一个功能,WebSurge 也有类似 Telerik Fiddler 的功能,可以针对指定的浏览器所发出的 Request 和接收的 Response 进行撷取,有兴趣的朋友可以去 WebSurge

使用ASP.NET Web API和Web API Client Gen使Angular 2应用程序的开发更加高效

本文介绍“ 为ASP.NET Web API生成TypeScript客户端API ”,重点介绍Angular 2+代码示例和各自的SDLC.如果您正在开发.NET Core Web API后端,则可能需要阅读为ASP.NET Core Web API生成C#Client API. 背景 自WebApiClientGenAngular 2仍然在RC2时,自2016年6月v1.9.0-beta 以来,对Angular2的支持已经可用.并且在WebApiClientGenv2.0中提供了对Angula

ODATA WEB API(二)----ODATA服务与客户端

一.概述 ODATA不经可以作为WebAPI建立相应的WEBAPI控制器,还可以建立ODataControl控制器,能够通过插件建立第三方ODataClinet类库:调用和使用数据变得简单可行. 二.建立OData Web API 服务端 1.通过NuGet添加第三方Microsoft.AspNet.OData: 2.建立相应的Model:Person和Trip using System; using System.Collections.Generic; using System.Compon

ABP示例程序-使用AngularJs,ASP.NET MVC,Web API和EntityFramework创建N层的单页面Web应用

本片文章翻译自ABP在CodeProject上的一个简单示例程序,网站上的程序是用ABP之前的版本创建的,模板创建界面及工程文档有所改变,本文基于最新的模板创建.通过这个简单的示例可以对ABP有个更深入的了解,每个工程里应该写什么样的代码,代码如何组织以及ABP是如何在工程中发挥作用的. 源文档地址:https://www.codeproject.com/Articles/791740/Using-AngularJs-ASP-NET-MVC-Web-API-and-EntityFram 源码可以

ABP 教程文档 1-1 手把手引进门之 AngularJs, ASP.NET MVC, Web API 和 EntityFramework(官方教程翻译版 版本3.2.5)含学习资料

本文是ABP官方文档翻译版,翻译基于 3.2.5 版本 转载请注明出处:http://www.cnblogs.com/yabu007/  谢谢 官方文档分四部分 一. 教程文档 二.ABP 框架 三.zero 模块 四.其他(中文翻译资源) 本篇是第一部分的第一篇. 第一部分分三篇 1-1 手把手引进门 1-2 进阶 1-3 杂项 (相关理论知识) 第一篇含两个步骤. 1-1-1 ASP.NET Core & Entity Framework Core 后端(内核)含两篇 ( 第一篇链接