基于AngularJS进行的封装,性能中等。
ionic开发环境部署
ionic
app主要使用命令行进行构建并使用Cordova
用来构建和打包。首先安装NodeJs,然后在ionic官网注册一个账号
1 | npm install -g inoic cordova # 安装命令行工具 |
此时可以去ionic的控制台查看该项目的信息以及设置一些自动构建相关配置了。但是目前只能在web端访问,如果想要生成ios或者android平台的项目还需要安装单独的工具:
for ios
1 | xcode-select --install # 安装xcode命令行工具 |
基本配置
可以自己创建一个全局的配置文件,类似koa2
:
1 | vim config/index.ts |
API
Controller
可以直接在page
的构造函数中自动注入,例如
1 | import { ModalController } from "ionic-angular"; |
ModalController
模态框,弹出层。
1 | const profileModal = this.modalCtrl.create(Profile, { userId: 8675309 }); |
NavController
主要负责导航的controller。包含有如下一些属性
1 | 生命周期函数(肯定是在page的constructor之后才会触发这些的) |
ViewChild
可以使用@ViewChild获取Nav组件的一个实例。例如
1 | // html中有<div #container class="post_container"></div>,定义了一个container,可以在ts中这样获取,定义该元素为ElementRef元素。 |
ViewController
视图控制器。可以控制当前页面的显示。
1 | this.viewCtrl.dismiss(); // 关闭当前page |
UI组件
Button
按钮组件。
Content
ion-content
最基本的内容组件。
搜索框。
1 | <ion-searchbar (ionInput)="getItems($event)"></ion-searchbar> |
搜索框。
Tab/Tabs
标签页,一般是位于页面底部,Tabs内部的元素就是Tab。需要注意的是,只有在控制器里面定义了ion-tab的root页面,页面才会显示,否则不会显示tabs。默认的tab的[root]
属性至少填写一个,不然会空白或者全黑
如果每一页都有底部的tab,最好让app的rootPage
直接设置为BasicPage
。
AngularJS组件
HttpClient网络请求
要发起网络请求,首先去要添加对应的module,在app.module.ts
里添加
1 | import { HttpClientModule } from "@angular/common/http"; |
常用插件推荐
TroubleShooting
ion-tabs 不显示,显示空白或者黑色,或者ion-tabs empty blank:默认的
ion-tab
的[root]
属性必须填写,而且不能设置为null
SearchBar无法自动设置setFocus(),setFocus() not working临时解决方案:
1
2
3setTimeout(()=>{
self.searchBar.setFocus();
},100);Cannot find module ‘@awesome-cordova-plugins/core’ or its corresponding type declarations: 很多ionic的插件会包装一层
awesome
,此时需要将该包给撞上npm install @awesome-cordova-plugins/core --save
No installed build tools found. Install the Android build tools version 19.1.0 or higher.: 尝试
export ANDROID_HOME=~/Library/Android/sdk && export PATH=${PATH}:${ANDROID_HOME}/tools && export PATH=${PATH}:${ANDROID_HOME}/platform-tools && export ANDROID_SDK_ROOT=~/Library/Android/sdk
,但是我遇到了另外一个奇怪的问题,无论我怎么设置环境变量,代码里面得到的ANDROID_HOME
都是/opt/homebrew/Caskroom/android-platform-tools
下的,所以我直接在cordova.gradle
文件里面的getAndroidSdkDir
写死了envVar
的值FATL ERROR: Ineffective mark-compacts neara heap limit Allocation failed - JavaScript heap out of memory: 尝试执行
export NODE_OPTIONS="--max-old-space-size=8192"