基于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 相关文章推荐
锋利的jQuery 第三章章节总结的例子
Mar 23 Javascript
js中判断控件是否存在
Aug 25 Javascript
JS去除数组重复值的五种不同方法
Sep 06 Javascript
javascript字符串替换及字符串分割示例代码
Dec 12 Javascript
jQuery菜单插件superfish使用指南
Apr 21 Javascript
vue.js实现表格合并示例代码
Nov 30 Javascript
简单的jQuery拖拽排序效果的实现(增强动态)
Feb 09 Javascript
Javascript实现base64的加密解密方法示例
Jun 27 Javascript
JavaScript实现图片本地预览功能【不用上传至服务器】
Sep 20 Javascript
基于Node.js实现压缩和解压缩的方法
Feb 13 Javascript
jQuery Migrate 插件用法实例详解
May 22 jQuery
JavaScript隐式类型转换代码实例
May 29 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
PHP 和 HTML
2006/10/09 PHP
PHP系统流量分析的程序
2006/10/09 PHP
PHP删除数组中空值的方法介绍
2014/04/14 PHP
PHP中文竖排转换实现方法
2015/10/23 PHP
从ThinkPHP3.2.3过渡到ThinkPHP5.0学习笔记图文详解
2019/04/03 PHP
js获取图片大小的函数代码
2011/09/20 Javascript
jQuery实现悬浮在右上角的网页客服效果代码
2015/10/24 Javascript
javascript中Date format(js日期格式化)方法小结
2015/12/17 Javascript
使用开源工具制作网页验证码的方法
2016/10/17 Javascript
yii form 表单提交之前JS在提交按钮的验证方法
2017/03/15 Javascript
关于前后端json数据的发送与接收详解
2017/07/30 Javascript
vue展示dicom文件医疗系统的实现代码
2018/08/27 Javascript
javascript(基于jQuery)实现鼠标获取选中的文字示例【测试可用】
2019/10/26 jQuery
微信内置开发 iOS修改键盘换行为搜索的解决方案
2019/11/06 Javascript
vue+elementUI中表格高亮或字体颜色改变操作
2020/11/02 Javascript
[10:34]DOTA2上海特级锦标赛全纪录
2016/03/25 DOTA
python re正则表达式模块(Regular Expression)
2014/07/16 Python
Python中apply函数的用法实例教程
2014/07/31 Python
python使用Berkeley DB数据库实例
2014/09/26 Python
CentOS 7下安装Python 3.5并与Python2.7兼容并存详解
2017/07/07 Python
Python多线程threading模块用法实例分析
2019/05/22 Python
python实现本地批量ping多个IP的方法示例
2019/08/07 Python
python正则表达式实例代码
2020/03/03 Python
python使用pyecharts库画地图数据可视化的实现
2020/03/25 Python
Selenium环境变量配置(火狐浏览器)及验证实现
2020/12/07 Python
将一个文本文件的内容按倒序打印出来
2015/01/05 面试题
在职研究生自我鉴定
2013/10/16 职场文书
师范应届生求职信
2013/11/15 职场文书
业务员薪酬管理制度
2014/01/15 职场文书
班子查摆四风个人对照检查材料思想汇报
2014/10/04 职场文书
小学家长意见怎么写
2015/06/03 职场文书
中学总务处工作总结
2015/08/12 职场文书
Vue项目打包、合并及压缩优化网页响应速度
2021/07/07 Vue.js
Python之matplotlib绘制折线图
2022/04/13 Python
在Windows Server 2012上安装 .NET Framework 3.5 所遇到的问题
2022/04/29 Servers
人工智能深度学习OpenAI baselines的使用方法
2022/05/20 Python