Angular2中的Observable与Ionic2中的Provider、Promise
随着Inoic Beta6的发布[1],对其中的一些技术细节, 重点是ReactiveX库,Angular2中的Observable,Ionic2中的Provider(或Service)、Promise做了初步的分析。 1. 如何查看app使用的是哪一个Ionic版本[1]方法1: 查看app使用的ionic库版本:npm view ionic-angular version 方法2:查看app根目录下的package.json文件,可以看到版本依赖关系,例如: "ionic-angular": "2.0.0-beta.6" 2.Components 与 Pages有哪些差异参照[2,3],pages是navigationcomponent(in the context of navigation)中的decorators。 3. ReactiveX库中的Observable 一个Observer向一个Observable来subscribe。Observable会通过调用observers的方法,向observersemits items或发送通知,“observer”也被称为“subscriber,” “watcher,” 或“reactor.”,通常被称为观察者模式、reactor模式等[6]。
Observables 和Observers仅仅是ReactiveX库的起点,它不仅仅只是对标准的观察者模式的一个小小的扩展,它更适于处理一系列事件而不只是一次回调函数的调用。 真正强大之处在于“reactive extensions” (因此这个库被命名为“ReactiveX”) — 可以对Observable发布的一系列items来做大量操作:transform,combine,manipulate等等。 这些Rx operators就可以用declarative方式将异步序列组合起来,这样既有回调函数的高效率,又避免了嵌套回调handlers在异步处理中典型的缺陷。这些operators包括: Creating Observables
Transforming Observable Items
Filtering Observables
Combining Observables
Error Handling Operators
Utility Operators
Conditional and Boolean Operators
Mathematical and Aggregate Operators
Converting Observables
Connectable Observable Operators
Backpressure Operators a variety of operators that enforce particular flow-control policies 许多operators处理Observable并返回Observable,这样这些operators就可以链式一个接一个调用。在链中的每个operator 处理的不是初始的Observable,而是在修改Observable后,将修改后的Observable依次传给下一个operator. Builder模式也是类似地链式调用,但Builder模式中链中方法顺序是无关的,而Observable operators顺序是相关的。 ReactiveX库有Java实现RxJava,有JavaScript实现RxJS。
4. Angular2中的Http Service与ObservableAngular 1中使用Promise异步加载数据,但在Angular 2中使用Observable来处理异步请求 ,Observable类由ReactiveX库提供。 Angular 2中的Http service是Angular 1中$http的继承者,http.get( )方法不再返回一个Promise,而是返回一个Observable对象。 ngOnInit(){ this.getFoods(); } getFoods(){ this.http.get('/app/food.json') .map((res:Response)=>res.json()) .subscribe( data=>{this.foods=data},err=>console.error(err),()=>console.log('done') ); } 调用http.get( )来执行HTTP请求,返回一个Observable对象,这样就可以使用map( )方法来配置待处理的数据, 使用subscribe( )方法来观察处理结果。 由于Angular不知道需要将response解析为JSON,需要使用 .map((res:Response) => res.json()) 调用来让Angular知道. 这个map( )方法也返回一个Observable,这样就可以使用method chaining. 调用subscribe( ) 方法来接收output,其中的三个参数都是event handler. 分别是onNext,onError,和onCompleted.
这三个参数中,onError 和onCompleted是可选参数,但通常onError不能省略,否则一个未捕获的Error会导致应用停止执行。 5. Ionic2中的Provider、Service、Observable与PromiseIonic2中Provider也就是一个Service,可以用ionic g provider PeopleService命令来生成一个名称为PeopleService的provider 。 Observable相对Promise有许多优势,因此Angular2中使用了RxJS。而当前Ionic中生成provider代码时使用的是ng2中的http模块,它是个observable,但then( )返回将它转为一个promise返回,ionic团队正在计划修改。 6. ionic-native与ngCordoavaIonic 2中ionic-native替换了ngCordoava。
[1] Announcing the Release of Ionic 2 Beta 6!,http://blog.ionic.io/announcing-the-release-of-ionic-2-beta-6/ [2]10 Minutes with Ionic 2: Calling an API,http://blog.ionic.io/10-minutes-with-ionic-2-calling-an-api/ [3] Ionic Docs Nav,http://ionicframework.com/docs/v2/api/components/nav/Nav/ [4]Refactor provider generator to use observables properly #5532,https://github.com/driftyco/ionic/issues/5532/ [5]Angular 2: HTTP,Observables,and concurrent data loading,http://www.metaltoad.com/blog/angular-2-http-observables [6]Observable,http://reactivex.io/documentation/observable.html [7]Reactor Guide 中文翻译,http://reactor.jervyshi.me/index.html (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 超漂亮的Bootstrap 富文本编辑器summernote
- 打字稿 – 为什么我的angular2应用程序初始化两次
- 数据结构 – 如何从scala中的文件中读取不可变数
- 斯卡拉 – 喷雾马歇尔为升级后喷雾1.2毫米隐含范
- 使用angularjs的ng-options时如何设置默认值(初始
- crontab 提示 command not found 解决方案
- opencv:将Scalar转换为float或double类型
- 【Angular Tips】开发Angular2+应用有用的tips..
- scala – 无法从SLF4J加载类“org.slf4j.impl.St
- angularjs – 使用相同的控制器两次使用不同的数