• 基于angular2 的 http服务封装 标签: angular标准class 2017-06-28 16:40 47人阅读 评论(0)


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

    }


    个人学习心得,大神路过 ,不喜勿喷
    有问题加我个人微信提问或者留言


  • 相关阅读:
    备忘: Visual Studio 2013 VC++ IDE 使用小贴示。
    获取动态数组指针 所指向数组长度的一种方法
    备忘:C++ 类 (初学之实录)。
    备忘:VC++ 中的异常处理
    备忘: C++中的 vector 容器
    备忘:C++基础 -- 数据类型的学习总结
    Windws Server 2008 R2 WEB环境配置之MYSQL 5.6.22安装配置
    Windows Server 2008 R2 WEB服务器配置系列文章索引
    php学习过程二
    php学习过程一
  • 原文地址:https://www.cnblogs.com/long328583644/p/7142117.html
Copyright © 2020-2023  润新知