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

 更新时间:2017年06月29日 09:33:55   作者:小处成就大事  
这篇文章主要介绍了基于angular2 的 http服务封装实例代码,

最近在项目中折腾了下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);//打印返回的数据
 });
 }

}

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

相关文章

  • AngularJS 应用身份认证的技巧总结

    AngularJS 应用身份认证的技巧总结

    这篇文章主要介绍了AngularJS 应用身份认证的技巧总结,具有一定的参考价值,有需要的可以了解一下。
    2016-11-11
  • RequireJs的使用详解

    RequireJs的使用详解

    本文主要介绍了RequireJs的使用。具有很好的参考价值,下面跟着小编一起来看下吧
    2017-02-02
  • 初识angular框架后的所思所想

    初识angular框架后的所思所想

    这篇文章主要介绍了初识angular框架后的所思所想,学习认识angular后的一些个人问题总结,需要的朋友可以参考下
    2016-02-02
  • angular6开发steps步骤条组件

    angular6开发steps步骤条组件

    这篇文章主要为大家详细介绍了angular6开发steps步骤条组件的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-07-07
  • AngularJS控制器controller给模型数据赋初始值的方法

    AngularJS控制器controller给模型数据赋初始值的方法

    这篇文章主要介绍了AngularJS控制器controller给模型数据赋初始值的方法,涉及AngularJS控制器controller简单赋值操作实现技巧,需要的朋友可以参考下
    2017-01-01
  • AngularJS 服务详细讲解及示例代码

    AngularJS 服务详细讲解及示例代码

    本文主要介绍AngularJS 服务,这里整理了AngularJS 服务的基本知识资料,并附示例代码和实现效果图,有兴趣的小伙伴可以参考下
    2016-08-08
  • AngularJS 作用域详解及示例代码

    AngularJS 作用域详解及示例代码

    本文主要介绍AngularJS 作用域的知识,这里整理了基础资料,和示例代码以及实现效果图,有需要的小伙伴可以参考下
    2016-08-08
  • AngularJS语法详解

    AngularJS语法详解

    本文通过示例向大家介绍了AngularJS语法的使用,小伙伴们认真研读下吧,非常的实用哦。
    2015-01-01
  • AngularJS过滤器filter用法分析

    AngularJS过滤器filter用法分析

    这篇文章主要介绍了AngularJS过滤器filter用法,结合实例形式分析了过滤器filter的功能、分类、使用方法与相关注意事项,需要的朋友可以参考下
    2016-12-12
  • AngularJS基础 ng-hide 指令用法及示例代码

    AngularJS基础 ng-hide 指令用法及示例代码

    本文主要介绍AngularJS ng-hide 指令,这里整理了ng-hide指令的基础资料,并附实例代码,有兴趣的小伙伴参考下
    2016-08-08

最新评论