基于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 金额格式化来回转换示例
Feb 23 Javascript
js控制元素显示在屏幕固定位置及监听屏幕高度变化的方法
Aug 11 Javascript
js游戏人物上下左右跑步效果代码分享
Aug 28 Javascript
jQuery实现本地预览上传图片功能
Jan 08 Javascript
jQuery实现遮罩层登录对话框
Dec 29 Javascript
js实现九宫格拼图小游戏
Feb 13 Javascript
jQuery实现动态加载select下拉列表项功能示例
May 31 jQuery
jQuery md5加密插件jQuery.md5.js用法示例
Aug 24 jQuery
Element 默认勾选表格 toggleRowSelection的实现
Sep 04 Javascript
Node绑定全局TraceID的实现方法
Nov 14 Javascript
Vue实现仿iPhone悬浮球的示例代码
Mar 13 Javascript
Vue实现跑马灯样式文字横向滚动
Nov 23 Vue.js
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
php中explode的负数limit用法分析
2015/02/27 PHP
php实现四舍五入的方法小结
2015/03/03 PHP
PHP模拟asp.net的StringBuilder类实现方法
2015/08/08 PHP
PHP匿名函数(闭包函数)详解
2019/03/22 PHP
使用js获取QueryString的方法小结
2010/02/28 Javascript
javascript游戏开发之《三国志曹操传》零部件开发(二)人物行走的实现
2013/01/23 Javascript
jQuery实用基础超详细介绍
2013/04/11 Javascript
javascript获取元素CSS样式代码示例
2013/11/28 Javascript
JS实现往下不断流动网页背景的方法
2015/02/27 Javascript
jquery通过扩展select控件实现支持enter或focus选择的方法
2015/11/19 Javascript
ztree获取选中节点时不能进入可视区域出现BUG如何解决
2015/12/03 Javascript
JS实现随页面滚动显示/隐藏窗口固定位置元素
2016/02/26 Javascript
jQuery基于BootStrap样式实现无限极地区联动
2016/08/26 Javascript
BootStrap 实现各种样式的进度条效果
2016/12/07 Javascript
详解vue嵌套路由-query传递参数
2017/05/23 Javascript
Vue.js实现价格计算器功能
2020/03/30 Javascript
Vue2.0用户权限控制解决方案的示例
2018/02/10 Javascript
详解原生JS动态添加和删除类
2019/03/26 Javascript
vue2.0自定义指令示例代码详解
2019/04/25 Javascript
[59:59]EG vs IG 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
PyCharm代码整体缩进,反向缩进的方法
2018/06/25 Python
Python3.5运算符操作实例详解
2019/04/25 Python
Python字典常见操作实例小结【定义、添加、删除、遍历】
2019/10/25 Python
关于tf.TFRecordReader()函数的用法解析
2020/02/17 Python
python解析xml文件方式(解析、更新、写入)
2020/03/05 Python
解决keras GAN训练是loss不发生变化,accuracy一直为0.5的问题
2020/07/02 Python
celery在python爬虫中定时操作实例讲解
2020/11/27 Python
HTML5本地存储localStorage、sessionStorage基本用法、遍历操作、异常处理等
2014/05/08 HTML / CSS
HTML5适合的情人节礼物有纪念日期功能
2021/01/25 HTML / CSS
联想印度官方网上商店:Lenovo India
2019/08/24 全球购物
护士毕业生自荐信
2014/02/07 职场文书
小学语文业务学习材料
2014/06/02 职场文书
“四风”查摆问题自我剖析材料
2014/09/27 职场文书
2015大学迎新晚会主持词
2015/07/16 职场文书
SQLServer常见数学函数梳理总结
2022/08/05 MySQL
go goth封装第三方认证库示例详解
2022/08/14 Golang