详解AngularJS2 Http服务


Posted in Javascript onJune 26, 2017

关于http服务

HttpModule并不是angular的核心模块,它是一个附加的模块,存在于@angular/http中,虽然如此但是依然可以在需要的时候使用它,只需要在使用之前引入即可。对于大多数app来说使用http服务是很常见的,所以我们将HttpModule加入到AppModule的import列表和应用的根组件中,这样就可以在整个应用中使用http服务了

在自定义服务中使用Http服务

http服务通过其get方法获取数据,他会返回RxJS Observable,我们希望使用的数据是Promise,然而 Observable 并没有toPromise()方法,可以在自定义服务中这样引入

import 'rxjs/add/operator/toPromise';

如此就拓展了Observable的功能了

具体代码如下

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

import { Headers, Http } from '@angular/http';

import 'rxjs/add/operator/toPromise';

import { Hero } from './hero';
 private heroesUrl = 'api/heroes'; // URL to web api

 constructor(private http: Http) { }

 getHeroes(): Promise<Hero[]> {
  return this.http.get(this.heroesUrl)
        .toPromise()
        .then(response => response.json().data as Hero[])
        .catch(this.handleError);
 }

 private handleError(error: any): Promise<any> {
  console.error('An error occurred', error); // for demo purposes only
  return Promise.reject(error.message || error);
 }

在回调函数then()中调用了返回对象的json()方法将data从返回对象中分离出来

.then(response => response.json().data as Hero[])

 这里的.data是因为返回对象中有data这个属性,具体情况下会不一样

注意:Http failure是经常发生的,必须预料到会有异常的可能,所以在方法最后捕获了异常并将其传递给异常处理器,使用Promise.reject()将错误信息返回给服务调用者

利用服务实现数据的增删改查

信息查询

可以在请求url里面带上参数,这样就可以将参数传到后台,服务器查到信息后返回到前台

getHero(id: number): Promise<Hero> {
    const url = `${this.heroesUrl}/${id}`;
    return this.http.get(url).toPromise()
   .then(response => response.json().data as Hero)
   .catch(this.handleError);
  }

修改信息

在自定义服务中

private headers = new Headers({'Content-Type': 'application/json'});
  update(hero: Hero): Promise<Hero> {
  const url = `${this.heroesUrl}/${hero.id}`;
  return this.http
  .put(url, JSON.stringify(hero), {headers: this.headers})
  .toPromise()
  .then(() => hero)
  .catch(this.handleError);
}

依然是在url后带上id告知服务器要修改的记录标识,JSON.stringify()将对象转化成json字符串,通过put将字符串放到请求中,header说明了请求体的类型

在调用服务的组件中

save(): void {
   this.heroService.update(this.hero)
    .then(() => this.goBack());
  }

修改成功后返回前一个视图

添加信息

在自定义服务中

create(name: string): Promise<Hero> {
 return this.http
  .post(this.heroesUrl, JSON.stringify({name: name}), {headers: this.headers})
  .toPromise()
  .then(res => res.json().data)
  .catch(this.handleError);
}

删除信息

在自定义服务中

delete(id: number): Promise<void> {
   const url = `${this.heroesUrl}/${id}`;
   return this.http.delete(url, {headers: this.headers})
    .toPromise()
    .then(() => null)
    .catch(this.handleError);
  }

这步只是将后台的信息删除了,但是本地数组中依然存在,所以依然会在视图中显示,所以就要在组建中进行一些处理

delete(hero: Hero): void {
 this.heroService
   .delete(hero.id)
   .then(() => {
    this.heroes = this.heroes.filter(h => h !== hero);
    if (this.selectedHero === hero) { this.selectedHero = null; }
   });
}

这步就是将已经删除的数据从本地数组中过滤掉

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jQuery each()小议
Mar 18 Javascript
基于jquery循环map功能的代码
Feb 26 Javascript
jQuery表格行换色的三种实现方法
Jun 27 Javascript
jquery 实现表单验证功能代码(简洁)
Jul 03 Javascript
showModelDialog弹出文件下载窗口的使用示例
Nov 19 Javascript
js 自动播放的实例代码
Nov 19 Javascript
JavaScript中提前声明变量或函数例子
Nov 12 Javascript
JavaScript中扩展Array contains方法实例
Aug 23 Javascript
JS返回只包含数字类型的数组实例分析
Dec 16 Javascript
web.js.字符串与正则表达式操作
May 13 Javascript
Vue表单控件绑定图文详解
Feb 11 Javascript
详解小程序退出页面时清除定时器
Apr 28 Javascript
详解用node.js实现简单的反向代理
Jun 26 #Javascript
JS作用域链详解
Jun 26 #Javascript
jQuery.Form实现Ajax上传文件同时设置headers的方法
Jun 26 #jQuery
纯JS实现简单的日历
Jun 26 #Javascript
vue2.0全局组件之pdf详解
Jun 26 #Javascript
JavaScript创建对象的七种方式(推荐)
Jun 26 #Javascript
基于 webpack2 实现的多入口项目脚手架详解
Jun 26 #Javascript
You might like
PHP4在WinXP下IIS和Apache2服务器上的安装实例
2006/10/09 PHP
php 按指定元素值去除数组元素的实现方法
2011/11/04 PHP
使用php的HTTP请求的库Requests实现美女图片墙
2015/02/22 PHP
Laravel 5框架学习之Laravel入门和新建项目
2015/04/07 PHP
PHP实现过滤各种HTML标签
2015/05/17 PHP
Yii使用smsto短信接口的函数demo示例
2016/07/13 PHP
Thinkphp框架 表单自动验证登录注册 ajax自动验证登录注册
2016/12/27 PHP
Laravel模型间关系设置分表的方法示例
2018/04/21 PHP
针对thinkPHP5框架存储过程bug重写的存储过程扩展类完整实例
2018/06/16 PHP
JavaScript 中的事件教程
2007/04/05 Javascript
js 调整select 位置的函数
2008/02/21 Javascript
js导航菜单(自写)简单大方
2013/03/28 Javascript
使用js声明数组,对象在jsp页面中(获得ajax得到json数据)
2013/11/05 Javascript
Javascript学习笔记之函数篇(五) : 构造函数
2014/11/23 Javascript
js超时调用setTimeout和间歇调用setInterval实例分析
2015/01/28 Javascript
javascript中数组(Array)对象和字符串(String)对象的常用方法总结
2016/12/15 Javascript
JS中cookie的使用及缺点讲解
2017/05/13 Javascript
jQuery Ajax使用FormData上传文件和其他数据后端web.py获取
2017/06/11 jQuery
JavaScript设计模式之构造函数模式实例教程
2018/07/02 Javascript
vux-scroller实现移动端上拉加载功能过程解析
2019/10/08 Javascript
JQuery使用属性addClass、removeClass和toggleClass实现增加和删除类操作示例
2019/11/18 jQuery
微信小程序国际化探索实现(附源码地址)
2020/05/20 Javascript
javascript实现前端分页功能
2020/11/26 Javascript
[58:12]Ti4第二日主赛事败者组 LGD vs iG 3
2014/07/21 DOTA
Python中关于使用模块的基础知识
2015/05/24 Python
Python实现定时执行任务的三种方式简单示例
2019/03/30 Python
python爬虫 爬取超清壁纸代码实例
2019/08/16 Python
Python爬虫爬取煎蛋网图片代码实例
2019/12/16 Python
python爬虫构建代理ip池抓取数据库的示例代码
2020/09/22 Python
利于python脚本编写可视化nmap和masscan的方法
2020/12/29 Python
联想台湾官网:Lenovo TW
2018/05/09 全球购物
函授教育个人学习的自我评价
2013/12/31 职场文书
个人函授自我鉴定
2014/03/25 职场文书
我的中国心演讲稿
2014/09/04 职场文书
语文复习计划
2015/01/19 职场文书
2016年大学生暑假爱心支教活动策划书
2015/11/26 职场文书