基于angular2 的 http服务封装的实例代码


Posted in Javascript onJune 29, 2017

最近在项目中折腾了下angular2,所以出来跟大家分享,希望有帮助,每个公司业务不一样,按实际情况而定,个人学习心得,不作为标准。

1、定义http-interceptor.service.ts服务,统一处理http请求

/**
 * name:http服务
 * describe:对http请求做统一处理
 * author:Angular那些事 
 * date:2017/6/3
 * time:11:29
 */
import {Injectable}    from '@angular/core';
import {Http, Response}   from '@angular/http';
import 'rxjs/add/operator/toPromise';

@Injectable()
export class HttpInterceptorService {

 constructor(private http: Http) {
 }

 /**
 * 统一发送请求
 * @param params
 * @returns {Promise<{success: boolean, msg: string}>|Promise<R>}
 */
 public request(params: any): any {
 if (params['method'] == 'post' || params['method'] == 'POST') {
  return this.post(params['url'], params['data']);
 }
 else {
  return this.get(params['url'], params['data']);
 }
 }

 /**
 * get请求
 * @param url 接口地址
 * @param params 参数
 * @returns {Promise<R>|Promise<U>}
 */
 public get(url: string, params: any): any {
 return this.http.get(url, {search: params})
  .toPromise()
  .then(this.handleSuccess)
  .catch(res => this.handleError(res));
 }

 /**
 * post请求
 * @param url 接口地址
 * @param params 参数
 * @returns {Promise<R>|Promise<U>}
 */
 public post(url: string, params: any) {
 return this.http.post(url, params)
  .toPromise()
  .then(this.handleSuccess)
  .catch(res => this.handleError(res));
 }

 /**
 * 处理请求成功
 * @param res
 * @returns {{data: (string|null|((node:any)=>any)
 */
 private handleSuccess(res: Response) {
 let body = res["_body"];
 if (body) {
  return {
  data: res.json().content || {},
  page: res.json().page || {},
  statusText: res.statusText,
  status: res.status,
  success: true
  }
 }
 else {
  return {
  statusText: res.statusText,
  status: res.status,
  success: true
  }
 }

 }

 /**
 * 处理请求错误
 * @param error
 * @returns {void|Promise<string>|Promise<T>|any}
 */
 private handleError(error) {
 console.log(error);
 let msg = '请求失败';
 if (error.status == 400) {
  console.log('请求参数正确');
 }
 if (error.status == 404) {

  console.error('请检查路径是否正确');
 }
 if (error.status == 500) {
  console.error('请求的服务器错误');
 }
 console.log(error);
 return {success: false, msg: msg};

 }

}

2、在每一个模块创建一个service,service定义此模块的所有http数据请求,我这里演示登录模块:login.service.ts

/**
 * name:登录服务
 * describe:请输入描述
 * author:Angular那些事
 * date:2017/6/1
 * time:00:13
 */
import {Injectable}    from '@angular/core';

import {HttpInterceptorService} from 'app/commons/service/http-interceptor.service'

@Injectable()
export class LoginService {

 constructor(private httpInterceptorService: HttpInterceptorService) {
 }

 /**
 * 登陆功能
 * @param params
 * @returns {Promise<{}>}
 */
 login(userName: string, passWord: string) {

 return this.httpInterceptorService.request({
  method: 'POST',
  url: 'http://119.232.19.182:8090/login',
  data: {
  loginName: userName,
  password: passWord
  },
 });

 }

 /**
 * 注册
 * @param user
 * @returns {any}
 */
 reguster(user: any) {

 return this.httpInterceptorService.request({
  method: 'POST',
  url: 'http://119.232.19.182:8090/reguster',
  data: {
  user: user
  },
 });

 }
}

3、在component注入servicelogin.service.ts。调用seriveLogin.service.ts服务定义的方法,这里通过login.component.ts演示

/**
 * name:登录组件
 * describe:请输入描述
 * author:Angular那些事
 * date:2017/6/1
 * time:00:30
 */
import {Component} from '@angular/core'
import {LoginService} from './login.service'

@Component({
 selector: 'login',
 templateUrl: './login.component.html',
 providers: [LoginService],
})

export class LoginComponent {
 private userName: string;
 private passWord: string;

 constructor(private loginService: LoginService) {
 }

 /**
 * 登录
 */
 toLogin() {
 this.loginService.login(this.userName, this.passWord).then(result => {
  console.log(result);//打印返回的数据
 });
 }

}

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

Javascript 相关文章推荐
js禁止小键盘输入数字功能代码
Aug 01 Javascript
jquery 按钮状态效果 正常、移上、按下
Aug 12 Javascript
jQuery实现鼠标滑过Div层背景变颜色的方法
Feb 17 Javascript
jQuery+AJAX实现网页无刷新上传
Feb 22 Javascript
javascript实现随机生成DIV背景色
Jun 20 Javascript
详谈JavaScript的闭包及应用
Jan 17 Javascript
Vue.js tab实现选项卡切换
May 16 Javascript
React Native实现进度条弹框的示例代码
Jul 17 Javascript
微信小程序学习笔记之函数定义、页面渲染图文详解
Mar 28 Javascript
jQuery删除/清空指定元素的所有子节点实例代码
Jul 04 jQuery
在vue-cli创建的项目中使用sass操作
Aug 10 Javascript
JavaScript实现图片合成下载的示例
Nov 19 Javascript
JS通过调用微信API实现微信支付功能的方法示例
Jun 29 #Javascript
详解vue数据渲染出现闪烁问题
Jun 29 #Javascript
将angular.js项目整合到.net mvc中的方法详解
Jun 29 #Javascript
详解webpack和webpack-simple中如何引入css文件
Jun 28 #Javascript
基于jQuery实现的Ajax 验证用户名唯一性实例代码
Jun 28 #jQuery
VUE利用vuex模拟实现新闻点赞功能实例
Jun 28 #Javascript
Vuex利用state保存新闻数据实例
Jun 28 #Javascript
You might like
虫族 Zerg 热键控制
2020/03/14 星际争霸
php实现的遍历文件夹下所有文件,编辑删除
2010/01/05 PHP
php cli换行示例
2014/04/22 PHP
php同时使用session和cookie来保存用户登录信息的实现代码
2016/05/13 PHP
php大小写转换函数(strtolower、strtoupper)用法介绍
2017/11/17 PHP
Javascript中的this绑定介绍
2011/09/22 Javascript
JavaScript实现下拉列表框数据增加、删除、上下排序的方法
2015/08/11 Javascript
AngularJs 利用百度地图API 定位当前位置 获取地址信息
2017/01/18 Javascript
JavaScript实现获取远程的html到当前页面中
2017/03/26 Javascript
JQueryMiniUI按照时间进行查询的实现方法
2017/06/07 jQuery
JS实现上传图片的三种方法并实现预览图片功能
2017/07/14 Javascript
.vue文件 加scoped 样式不起作用的解决方法
2018/05/28 Javascript
vue+web端仿微信网页版聊天室功能
2019/04/30 Javascript
编写更好的JavaScript条件式和匹配条件的技巧(小结)
2019/06/27 Javascript
解决使用layui的时候form表单中的select等不能渲染的问题
2019/09/18 Javascript
vuex+axios+element-ui实现页面请求loading操作示例
2020/02/02 Javascript
如何用JS模拟实现数组的map方法
2020/07/30 Javascript
vue+element_ui上传文件,并传递额外参数操作
2020/12/05 Vue.js
[50:15]VP vs Mineski 2018国际邀请赛淘汰赛BO3 第二场 8.22
2018/08/23 DOTA
Python中os和shutil模块实用方法集锦
2014/05/13 Python
python调用新浪微博API项目实践
2014/07/28 Python
Python格式化css文件的方法
2015/03/10 Python
python对指定目录下文件进行批量重命名的方法
2015/04/18 Python
Python基于正则表达式实现检查文件内容的方法【文件检索】
2017/08/30 Python
深入浅析Python传值与传址
2018/07/10 Python
[原创]Python入门教程4. 元组基本操作
2018/10/31 Python
利用nohup来开启python文件的方法
2019/01/14 Python
Python定时任务工具之APScheduler使用方式
2019/07/24 Python
Python函数递归调用实现原理实例解析
2020/08/11 Python
css3的图形3d翻转效果应用示例
2014/04/08 HTML / CSS
热能动力工程毕业生自荐信
2013/11/07 职场文书
酒店管理毕业生自荐信
2014/05/25 职场文书
无子女夫妻离婚协议书(4篇)
2014/10/20 职场文书
《青山不老》教学反思
2016/02/22 职场文书
李白经典诗之一:全文无一“月”字,却句句有月
2019/07/12 职场文书
Python中Permission denied的解决方案
2021/04/02 Python