基于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 相关文章推荐
索趣科技的答案
Feb 07 Javascript
JavaScript Undefined,Null类型和NaN值区别
Oct 22 Javascript
jquery自动完成插件(autocomplete)应用之PHP版
Dec 15 Javascript
JavaScript接口实现代码 (Interfaces In JavaScript)
Jun 11 Javascript
js解析与序列化json数据(三)json的解析探讨
Feb 01 Javascript
jquery easyui滚动条部分设置介绍
Sep 12 Javascript
jQuery实现查找最近父节点的方法
Jun 23 Javascript
浅谈MVC+EF easyui dataGrid 动态加载分页表格
Nov 10 Javascript
在vue中使用Autoprefixed的方法
Jul 27 Javascript
require.js 加载过程与使用方法介绍
Oct 30 Javascript
Node.js net模块功能及事件监听用法分析
Jan 05 Javascript
搭建一个Koa后端项目脚手架的方法步骤
May 30 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中使用cURL实现Get和Post请求的方法
2013/03/13 PHP
PHP删除数组中空值的方法介绍
2014/04/14 PHP
PHP生成RSS文件类实例
2014/12/05 PHP
使用新浪微博API的OAuth认证发布微博实例
2015/03/27 PHP
实例详解PHP中html word 互转的方法
2016/01/28 PHP
Laravel下生成验证码的类
2017/11/15 PHP
Laravel 微信小程序后端搭建步骤详解
2019/11/26 PHP
自己写了一个展开和收起的多更能型的js效果
2013/03/05 Javascript
jquery遍历checkbox介绍
2014/02/21 Javascript
JavaScript中的操作符==与===介绍
2014/12/31 Javascript
javascript带回调函数的异步脚本载入方法实例分析
2015/07/02 Javascript
BootStrap的JS插件之轮播效果案例详解
2016/05/16 Javascript
百度地图API之百度地图退拽标记点获取经纬度的实现代码
2017/01/12 Javascript
vue如何集成raphael.js中国地图的方法示例
2017/08/15 Javascript
angularJS实现动态添加,删除div方法
2018/02/27 Javascript
angularjs 获取默认选中的单选按钮的value方法
2018/02/28 Javascript
Vue.js点击切换按钮改变内容的实例讲解
2018/08/22 Javascript
原生JS实现旋转轮播图+文字内容切换效果【附源码】
2018/09/29 Javascript
vue学习笔记五:在vue项目里面使用引入公共方法详解
2019/04/04 Javascript
基于element-ui封装可搜索的懒加载tree组件的实现
2020/05/22 Javascript
Using Django with GAE Python 后台抓取多个网站的页面全文
2016/02/17 Python
Python 描述符(Descriptor)入门
2016/11/20 Python
在python中实现将一张图片剪切成四份的方法
2018/12/05 Python
Django错误:TypeError at / 'bool' object is not callable解决
2019/08/16 Python
Python3.7 读取 mp3 音频文件生成波形图效果
2019/11/05 Python
python Manager 之dict KeyError问题的解决
2019/12/21 Python
Django ORM 查询表中某列字段值的方法
2020/04/30 Python
学生自我鉴定范文
2013/10/04 职场文书
赔偿协议书范本
2014/04/15 职场文书
临床专业自荐信
2014/06/22 职场文书
教师群众路线剖析材料
2014/09/29 职场文书
2014年高中教师工作总结
2014/12/19 职场文书
自荐信格式范文
2015/03/04 职场文书
王亚平太空授课观后感
2015/06/12 职场文书
小学生运动会广播
2015/08/19 职场文书
如何打开Win11系统注册表编辑器?Win11注册表编辑器打开修复方法
2022/04/05 数码科技