有较长时间没有用Ionic了,见新的公众号需求比较简单,便决定使用Ionic4来实现。 其实,Ionic2和Ionic3的差别不大,而ionic4则变化比较大了,它支持angular、vue、react或其它任意js框架,甚至不使用js框架,它更像一个纯粹UI库。 截止到此文时,ionic4还是beta3版,所以还有不少bug存在,但整个项目下来,感觉也没有特别硬性不能解决的bug,就算有,基本也有替代方案。 一、项目差异那现在来看看怎么用ionic4,首先,我们还是以传统的angular来使用之: ionic start <name> <template> [options] 而示例命令有:
其中,创建使用原生功能的项目,除了Cordova外,多了Capacitor的选择,此外,创建Angular版本ionic4项目的命令是这个(注意:带参数。不带参数创建的是ionic3项目):
当然也可以用angular-cli创建普通Angular项目,然后npm添加@ionic/core模块,创建完成后到目录结构如下图所示,它不再像ionic3那样封装了angular项目,而是直接就是一个angular项目,而且默认懒加载: ![]() image.png 二、路由差异
观察目录结构,很容易发现这是一个angular项目,是因为它有一个routing模块: import { NgModule } from '@angular/core';import { Routes, RouterModule } from '@angular/router';const routes: Routes = [
{ path: '', loadChildren: './tabs/tabs.module#TabsPageModule' }
];
@NgModule({ imports: [RouterModule.forRoot(routes)], exports: [RouterModule]
})export class AppRoutingModule {} 而对应的路由组件是ion-router-outlet,是对Angular的router-outlet扩展,以兼容旧的导航方式,打开tabs.page.html可看到下面内容:
而原来ionic3的生命周期函数由原来的: ionViewDidLoad
ionViewWillEnter
ionViewDidEnter
ionViewWillLeave
ionViewDidLeave
ionViewWillUnload
ionViewCanEnter
ionViewCanLeave 也相应做了调整,如:
言外之意是,你既可以使用如下Angular方式做路由跳转: this.router.navigateByUrl('/login');this.router.navigate(['/detail', { id: itemId }]); 也可以使用原有Ionic方式管控堆栈:
三、组件和指令的变更Ionic为了更通用化,把原来的指令调整为更通用标准的属性方式,如 modal-controller
popover-controller
action-sheet-controller
loading-controller
…… 前面2个一般是有自定义UI的,在ionic3中是可通过自定义组件注入ViewController来关闭窗口,在ionic4中已经没有这个方法,改为通过监听事件或回调给外面的xxx-controller来关闭。
四、主题样式的变更这一块也是变更比较大的,主要是ionic4使用了ShadowDOM,这个我不详做说明了,有空自己看吧: 五、打包
基于上述原因,Ionic4优化了在Web项目上的表现,差不多比ionic3压缩了一半体积,但默认使用Angular6的构建器,构建速度慢了很多,还没有Webpack集成,动不动几十到上百个js文件给人有点凌乱的感觉,同时也增加了网络请求开销。 总结
|
|
来自: liang1234_ > 《Hybird APP》