基于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 相关文章推荐
csdn 博客的css样式 v3
Feb 24 Javascript
jquery 模式对话框终极版实现代码
Sep 28 Javascript
jQuery选中select控件 无法设置selected的解决方法
Sep 01 Javascript
jquery的extend和fn.extend的使用说明
Jan 09 Javascript
jquery 提示信息显示后自动消失的具体实现
Dec 18 Javascript
Bootstrap每天必学之下拉菜单
Nov 25 Javascript
学习javascript面向对象 理解javascript对象
Jan 04 Javascript
javascript跑马灯抽奖实例讲解
Apr 17 Javascript
微信小程序 WXML、WXSS 和JS介绍及详解
Oct 08 Javascript
Vue中android4.4不兼容问题的解决方法
Sep 04 Javascript
Vue中的循环及修改差值表达式的方法
Aug 29 Javascript
原生JS实现留言板
Mar 26 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
discuz论坛 用户登录 后台程序代码
2008/11/27 PHP
PHP字符编码问题之GB2312 VS UTF-8解决方法
2011/06/23 PHP
php中替换字符串中的空格为逗号','的方法
2014/06/09 PHP
Laravel使用支付宝进行支付的示例代码
2017/08/16 PHP
js根据给定的日期计算当月有多少天实现思路及代码
2013/02/25 Javascript
asp.net中System.Timers.Timer的使用方法
2013/03/20 Javascript
div拖拽插件——JQ.MoveBox.js(自制JQ插件)
2013/05/17 Javascript
firefox浏览器不支持innerText的解决方法
2013/08/07 Javascript
javascript实现禁止右键和F12查看源代码
2014/12/26 Javascript
JS实现弹出浮动窗口(支持鼠标拖动和关闭)实例详解
2015/08/06 Javascript
jqueryMobile使用示例分享
2016/01/12 Javascript
基于原生JS实现图片裁剪
2016/08/01 Javascript
Angularjs cookie 操作实例详解
2017/09/27 Javascript
NodeJS实现视频转码的示例代码
2017/11/18 NodeJs
解决低版本的浏览器不支持es6的import问题
2018/03/09 Javascript
详解ECMAScript typeof用法
2018/07/25 Javascript
vue响应式系统之observe、watcher、dep的源码解析
2019/04/09 Javascript
jQuery Ajax async=&gt;false异步改为同步时,解决导致浏览器假死的问题
2019/07/22 jQuery
JavaScript碰撞检测原理及其实现代码
2020/03/12 Javascript
[42:32]Secret vs Optic 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
python网络编程学习笔记(二):socket建立网络客户端
2014/06/09 Python
Windows下PyMongo下载及安装教程
2015/04/27 Python
Python中计算三角函数之cos()方法的使用简介
2015/05/15 Python
Python快速排序算法实例分析
2017/11/29 Python
python在线编译器的简单原理及简单实现代码
2018/02/02 Python
django restframework serializer 增加自定义字段操作
2020/07/15 Python
分布式数据库需要考虑哪些问题
2013/12/08 面试题
服务行业个人求职的自我评价
2013/12/12 职场文书
煤矿班组长竞聘书
2014/03/31 职场文书
经典毕业生求职信
2014/07/12 职场文书
解除租房协议书
2014/12/03 职场文书
2014幼儿园班主任工作总结
2014/12/04 职场文书
幼儿园老师个人总结
2015/02/28 职场文书
幼儿园奖惩制度范本
2015/08/05 职场文书
导游词之扬州大明寺
2019/10/09 职场文书
Android 中的类文件和类加载器详情
2022/06/05 Java/Android