链接:
ionic3教程(一)安装和配置
ionic3教程(二)登录页制作
ionic3教程(三)设置页制作
ionic3教程(四)安卓硬件返回键处理
ionic3 教程(五)基本的网络请求

这是最后一节,本节主要用最简单网络请求和基本的内置指令做一个演示。

前言

通常我们希望在 HTTP 请求的时候,页面不会失去响应,所以我们的 HTTP 请求是异步的。
JavaScript 中,通常用 3 种方式处理异步代码。

  1. 回调(callback)
  2. 承诺(promise)
  3. 可观察对象(observable)

promise 和 observable 主要三个主要不同:

  • observable 可以中途取消,promise 发出就不行
  • observable 可以持续发射很多值,而 promise 只能发射一个值就结束了
  • observable 提供了更多的工具函数,最常用的是 filter 等

想更多了解 promise 的请看
《JavaScript Promise迷你书》

想更多了解 rxjs(observable) 的请看
《rxjs中文教程》

在 Angular 中,处理异步代码的最佳方式就是使用可观察对象,所以接下来会用到

app.module.ts

导入 Angular 的 HttpModule。

import { HttpModule } from '@angular/http';

//然后在 imports 中插入 HttpModule 即可

测试用接口

本来找了一些别的接口作为测试,发现不会显示数据,打开 Chrome 测试了一下发现有跨域问题。

XMLHttpRequest cannot load

所以这里给大家推荐个网站,我们就用他来进行测试。
http://jsonplaceholder.typico...

拖到下面的 Resources 可以看到图片。从图中可以看出接口种类还是比较丰富的,我们选择带图片的 /photos 进行测试。

home.ts

import { Http, Response } from '@angular/http';

@Component({
selector: 'page-home',
templateUrl: 'home.html'
})
export class HomePage {
// 接收数据用
listData: Object; // 依赖注入
constructor(public navCtrl: NavController, private http: Http) { } ionViewDidLoad() {
// 网络请求
this.http.request('http://jsonplaceholder.typicode.com/photos')
.subscribe((res: Response) => {
this.listData = res.json();
});
}

http.request 会返回一个 Observable 对象。我们可以使用 subscribe 订阅变化。

当 http.request 从服务器返回一个流时,它就会发出一个 Response 对象。我们用 json 方法提取出响应体解析成一个 Object,最后将它赋值给 this.listData。

home.html

<ion-header>
<ion-navbar>
<ion-title>首页</ion-title>
</ion-navbar>
</ion-header> <ion-content padding>
<ion-list *ngFor="let item of listData">
<ion-item>
<ion-avatar item-left>
<img [src]="item?.url">
</ion-avatar>
{{item?.title}}
</ion-item>
</ion-list>
</ion-content>

这里使用了一个 ngFor 遍历了 listData,生成了一个列表数据。还有一点要提一下,这个 item?.title 是 Angular 的一种语法,如果对象为空就不会取值,可以防止报错。

最后效果如图所示

再补上一个 Promise 的写法

import 'rxjs/add/operator/toPromise';

this.http.request('http://jsonplaceholder.typicode.com/photos')
.toPromise()
.then(res => { this.listData = res.json(); })
.catch(err => { console.error(err) });

自己动手试一试吧。这个入门系列结束之后,应该会去找一些模块进行深入点的展开。

Demo下载地址

ionic3 教程(五)基本的网络请求的更多相关文章

  1. Cocoa Touch(五):网络请求 NSURLSession/AFNetworking, GCD, NSURLResquest

    NSURLRequest 网络请求的关键的就是NSURLRequest类,它的实例表示了请求报文实体以及请求的缓存策略等等,各种网络框架的最终目标都是把这个对象编译成为请求报文发送出去.下面用一个实例 ...

  2. Angular2入门系列教程7-HTTP(一)-使用Angular2自带的http进行网络请求

    上一篇:Angular2入门系列教程6-路由(二)-使用多层级路由并在在路由中传递复杂参数 感觉这篇不是很好写,因为涉及到网络请求,如果采用真实的网络请求,这个例子大家拿到手估计还要自己写一个web ...

  3. 微信小程序教学第二章(含视频):小程序中级实战教程之预备篇 - 封装网络请求及 mock 数据

    § 封装网络请求及 mock 数据 本文配套视频地址: https://v.qq.com/x/page/i05544fogcm.html 开始前请把 ch2-3 分支中的 code/ 目录导入微信开发 ...

  4. Sagit.Framework For IOS 开发框架入门教程6:网络请求STHttp

    前言: IOS的文章,今天,再来补一篇,Sagit的教程: 虽然感觉IOS的文章没什么观众,还是努力写吧,-_-〜 Sagit 开源地址:https://github.com/cyq1162/Sagi ...

  5. React Native探索(五)使用fetch进行网络请求

    相关文章 React Native探索系列 前言 React Native可以使用多种方式来请求网络,比如fetch.XMLHttpRequest以及基于它们封装的框架,fetch可以说是替代XMLH ...

  6. 从零学习Fluter(五):Flutter中手势滑动拖动已经网络请求

    从六号开始搞Flutter,到今天写这篇blog已经过了4天时间,文档初步浏览了一遍,写下了这个demo.demo源码分享在github上,现在对flutter有种说不出的喜欢了.大家一起搞吧! 废话 ...

  7. 【cocos2d-js网络教程篇】cocos2d-js http网络请求

    前言 刚入手cocos2d-js,看到网上的JS的http网络请求,大部分都是错的.原因在于,js-tests里面的网络请求实例没有给出加载完成事件.正确的加载完成事件如下: var xhr = cc ...

  8. 移动开发在路上-- IOS移动开发 五 网络请求封装

    接着上次的讲,这次我们讲 网络请求的封装  打开创建的项目,让我们一起来继续完成他, 上次我们说到GET请求地址的拼接: 我们接着上次的继续完善: 下边我们要定义的是 block //定义block ...

  9. Flutter学习五之网络请求和轮播图的实现

    上期讲到了,怎样实现一个下拉刷新和加载更多的列表,数据更新,需要使用到网络请求,在flutter中,怎样实现一个网络请求呢?官方使用的是dart io中的HttpClient发起的请求,但HttpCl ...

随机推荐

  1. Android studio常用快捷键导包的设置

    下面是一些快捷键的使用还有快速导包的设置 1. Ctrl+G 同时按下Ctrl+G快捷键弹出快速定位框,在框中输入行数点击OK即可快速切换到对应的行数,如图2.17所示. 2. Ctrl+E 同时按下 ...

  2. selenium+python自动化102-登录页面滑动解锁(ActionChains)

    前言 登录页面会遇到滑动解锁,滑动解锁的目的就是为了防止别人用代码登录(也就是为了防止你自动化登录),有些滑动解锁是需要去拼图这种会难一点. 有些直接拖到最最右侧就可以了,本篇讲下使用 seleniu ...

  3. laravel 实现详情分页

    选择合适的PHP框架及前端框架布局页面(10分) 首先展示出分类列表,每个分类下只显示3条信息,无需分页 (30分) 在列表页 点击文章标题进入详细页面,对应的文章点击量+1(30分) 在详细页面点击 ...

  4. k8s命令行web代理神器gotty

    目录 介绍 安装 使用示例 -p 指定端口 -c 指定账号密码 -w 支持tty交互 --permit-arguments 支持get参数传参 --random-url 生成随机地址 --reconn ...

  5. Nginx解决跨域问题No 'Access-Control-Allow-Origin'

    使用nginx在server块下的location块下为请求添加请求头来解决跨域 add_header 'Access-Control-Allow-Origin' '*'; add_header 'A ...

  6. Windows 10平台安装PostgreSQL 14.2详细教程

    Windows 10平台安装postgreSQL 14.2.1,安装步骤很简单,基本上是点击下一步(next). 使用SQL Shell(psql)进行交互:使用pgAdmin工具进行管理. tips ...

  7. 二维码生成工具——QRCode

    下载QRCode的源代码:https://github.com/davidshimjs/qrcodejs 引入项目中:<script type="text/javascript&quo ...

  8. BLHeli/ BLHeli_S开源无刷电调学习记录

    BLHeli的历史轨迹:BLHeli -> BLHeli_S -> BLHeli_32,我们重点学习BLHeli_S版本. 该代码支持常规的1-2ms脉冲宽度输入,以及Oneshot125 ...

  9. 玩转SpringBoot之定时任务@Scheduled线程池配置

    序言 对于定时任务,在SpringBoot中只需要使用@Scheduled 这个注解就能够满足需求,它的出现也给我们带了很大的方便,我们只要加上该注解,并且根据需求设置好就可以使用定时任务了. 但是, ...

  10. 羽夏逆向指引—— Hook

    写在前面   此系列是本人一个字一个字码出来的,包括示例和实验截图.可能有错误或者不全面的地方,如有错误,欢迎批评指正,本教程将会长期更新. 如有好的建议,欢迎反馈.码字不易,如果本篇文章有帮助你的, ...