博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ionic3项目实战教程 - 第3讲 ionic3封装全局网络请求服务app.service
阅读量:6169 次
发布时间:2019-06-21

本文共 5487 字,大约阅读时间需要 18 分钟。

ionic3项目实战教程 - 第3讲 �ionic3封装全局网络请求服务app.service

这一讲主要包含以下几个部分

  • 配置全局的接口地址;
  • 封装http get请求参数编码;
  • 封装特定http get请求;
  • 封装特定http post请求;
  • 封装全局的alert和toast;
  • 封装全局获取/移除缓存数据的函数
  • 在app.module的providers注入全局服务类;

新建一个类,命名为app.service.ts,位于�src/app/目录下,具体代码如下:

app.service.ts

import { LoadingController, AlertController, ToastController } from 'ionic-angular';import { Injectable } from '@angular/core';import { Http } from '@angular/http';import 'rxjs/add/operator/toPromise';@Injectable()export class AppGlobal {    //缓存key的配置    static cache: any = {        slides: "_dress_slides",        categories: "_dress_categories",        products: "_dress_products"    }    //接口基地址    static domain = "https://tlimama.tongedev.cn"    //接口地址    static API: any = {        getCategories: '/api/ionic3/getCategories',        getProducts: '/api/ionic3/getProducts',        getDetails: '/api/ionic3/details'    };}@Injectable()export class AppService {    constructor(public http: Http, public loadingCtrl: LoadingController, private alertCtrl: AlertController, private toastCtrl: ToastController, ) { }    // 对参数进行编码    encode(params) {        var str = '';        if (params) {            for (var key in params) {                if (params.hasOwnProperty(key)) {                    var value = params[key];                    str += encodeURIComponent(key) + '=' + encodeURIComponent(value) + '&';                }            }            str = '?' + str.substring(0, str.length - 1);        }        return str;    }    httpGet(url, params, callback, loader: boolean = false) {        let loading = this.loadingCtrl.create({});        if (loader) {            loading.present();        }        this.http.get(AppGlobal.domain + url + this.encode(params))            .toPromise()            .then(res => {                var d = res.json();                if (loader) {                    loading.dismiss();                }                callback(d == null ? "[]" : d);            })            .catch(error => {                if (loader) {                    loading.dismiss();                }                this.handleError(error);            });    }    httpPost(url, params, callback, loader: boolean = false) {        let loading = this.loadingCtrl.create();        if (loader) {            loading.present();        }        this.http.post(AppGlobal.domain + url, params)            .toPromise()            .then(res => {                var d = res.json();                if (loader) {                    loading.dismiss();                }                callback(d == null ? "[]" : d);            }).catch(error => {                if (loader) {                    loading.dismiss();                }                this.handleError(error);            });    }        private handleError(error: Response | any) {        let msg = '';        if (error.status == 400) {            msg = '请求无效(code:404)';            console.log('请检查参数类型是否匹配');        }        if (error.status == 404) {            msg = '请求资源不存在(code:404)';            console.error(msg + ',请检查路径是否正确');        }        if (error.status == 500) {            msg = '服务器发生错误(code:500)';            console.error(msg + ',请检查路径是否正确');        }        console.log(error);        if (msg != '') {            this.toast(msg);        }    }    alert(message, callback?) {        if (callback) {            let alert = this.alertCtrl.create({                title: '提示',                message: message,                buttons: [{                    text: "确定",                    handler: data => {                        callback();                    }                }]            });            alert.present();        } else {            let alert = this.alertCtrl.create({                title: '提示',                message: message,                buttons: ["确定"]            });            alert.present();        }    }    toast(message, callback?) {        let toast = this.toastCtrl.create({            message: message,            duration: 2000,            dismissOnPageChange: true,        });        toast.present();        if (callback) {            callback();        }    }    setItem(key: string, obj: any) {        try {            var json = JSON.stringify(obj);            window.localStorage[key] = json;        }        catch (e) {            console.error("window.localStorage error:" + e);        }    }    getItem(key: string, callback) {        try {            var json = window.localStorage[key];            var obj = JSON.parse(json);            callback(obj);        }        catch (e) {            console.error("window.localStorage error:" + e);        }    }}

配置完全局服务类之后,还需要做以下两点更改:

  • 1.在app.module的providers注入全局服务类;
  • 2.因ionic3一些新特性的加入,在使用http网络请求之前,需要导入HttpModule模块;

app.module.ts具体代码如下:

import { HttpModule } from '@angular/http';import { AppService } from './app.service';import { NgModule, ErrorHandler } from '@angular/core';import { BrowserModule } from '@angular/platform-browser';import { IonicApp, IonicModule, IonicErrorHandler } from 'ionic-angular';import { MyApp } from './app.component';import { StatusBar } from '@ionic-native/status-bar';import { SplashScreen } from '@ionic-native/splash-screen';@NgModule({declarations: [    MyApp],imports: [    BrowserModule, HttpModule,    IonicModule.forRoot(MyApp)],bootstrap: [IonicApp],entryComponents: [    MyApp],providers: [    StatusBar,    SplashScreen, AppService,    { provide: ErrorHandler, useClass: IonicErrorHandler }]})export class AppModule { }

完!

转载地址:http://pcnba.baihongyu.com/

你可能感兴趣的文章
Exchange 2013 PowerShell配置文件
查看>>
批量删除oracle中以相同类型字母开头的表
查看>>
7.对象创建型模式-总结
查看>>
6.13心得
查看>>
java父子进程通信
查看>>
Java集合---HashMap源码剖析
查看>>
向上扩展型SSD 将可满足向外扩展需求
查看>>
用tar和split将文件分包压缩
查看>>
大数据传输,文件传输的专业解决方案!
查看>>
常用URL地址
查看>>
struts国际化
查看>>
数据库 : 事物以及隔离性导致的问题
查看>>
Jquery乱码终极解决方案
查看>>
Android Fragment 真正的完全解析(上) (转载)
查看>>
多线程依次打印abcabc
查看>>
一:学习Linux前准备工作
查看>>
how to install wireless driver for Dell 630 in Ubuntu
查看>>
Kafka 配置参数汇总及相关说明
查看>>
弄清 CSS3 的 transition 和 animation
查看>>
服务器指定网卡进行备份数据避免影响业务口
查看>>