环境准备
- npm install -g cordova ionic
- ionic start myApp --v2 --skip-npm,这一步是从git上拉取项目模板,内网环境下是无法下下来的, --v2是下载ionic2版本, --skip-npm是因为下完模板后ionic会自动npm install,跳过这部然后自己手动用cnpm下载
- cd myApp
- ionic serve -lc,ionic提供的浏览器调试,一开始一直不成功。多次新建项目下载重试后,成功...还是网络不稳定导致的吧,-lc是ionic lab,该页面可以同时调试在Android、IOS和WP设备上的样式;
- ionic platform add android,添加android平台下的项目结构,在platforms文件夹下。
- ionic build android, ionic run android -lc,编译和在真机上运行,-lc类似serve下的-lc,可以实时在真机上调试;
gradle 配置
- ionic build android是通过gradle编译,而且会在线下载gradle,墙内基本是下不了的,这就需要手动下载项目需要的gradle版本。 查看android platform下的build.gradle文件,看当前版本需要的gradle version。 下载成功后,放在myApp\platforms\android\gradle文件夹下, 命令行输入set CORDOVA_ANDROID_GRADLE_DISTRIBUTION_URL=../gradle-2.14.1-all.zip
- maven下载失败问题。替换为阿里云镜像:
打开项目\platforms\android\build.gradle修改:
Ionic2 使用
Ionic2添加页面模板
ionic g page xxx页面跳转
引入 import {NavController} from 'ionic-angular'
在类中通过push和pop方法跳转或返回上个页面:
this.navCtrl.push(demoPage);
this.navCtrl.pop()页面间的参数传递
引入import {NavParams} from 'ionic-angular'
跳转时传入参数: this.navCtrl.push(demoPage, {item: 'value'})
跳转后的页面通过get方法获取值: let temp = this.navParams.get('item')select/radioGroup的默认选择问题
官方文档中给出的方法是在html中使用属性selected="true"/ checked="true";
目前来看该方法不起作用,查看issue,发现需通过ngModel绑定变量,设定变量的初始值。搜索框
ionic2页面切换数据不刷新
在tabs模板下,切换页面,初始化的方法只会执行一次,但一些动态从服务器获取的数据是希望每次进入页面时都重新获取刷新的,这就需要对ionic的页面生命周期有一定了解,可以将数据请求刷新的方法放在ionViewWillEnter中。ionic2的生命周期如下:
阻止点击事件传递方法
(click)="do(); $event.stopPropagation()"修改应用图标和启动画面
- 找到合适的图标文件,png格式
- 替换项目resources文件夹下的icon.png
- 项目路径下运行ionic resources命令,该命令为所有platform生成对应分辨率的图片
- 若想针对不同platform使用不同图标,图片复制到resources下对应platform文件夹下,再运行ionic resources
ionic resources对应的服务似乎不太稳定
修改应用名称
修改根目录下config.xml文件:
<widget id="com.ionframework.demo">,id对应应用的包名
<name></name>对应应用名称,直接修改Android的values文件没有效果解决Splash后出现短暂白屏问题
修改config.xml:
添加 <preference name="AutoHideSplashScreen" value="false"/>
注释掉 <preference name="SplashScreenDelay" value="3000"/>关于crosswalk
crosswalk是针对安卓设备的一个webview插件,性能较好,目前ionic2的demo里不会自带crosswalk。官方的说法是它们发现只有在低于4.x.x的安卓系统上,ionic应用运行性能不稳定,而4.x.x的设备在Google的统计里,全球只有不到11%。
Angular2双向绑定
ngModule
Angular2依赖注入
在自定义了一个http服务类后,页面中引用方法报错,原因是没有给服务类添加注解@Injectable(),@Injectable()标志着一个类可以被一个注入器实例化;通常来讲,在试图实例化一个没有被标识为@Injectable()的类时候,注入器将会报告错误
Ionic2引入第三方js库
应用中想实现一个页面,进入时显示根据设备uuid生成的二维码,虽然barcodescanner可以实现生成二维码,但会打开一个Activity,这样体验不符合需求。于是想到引用第三方的js库,如qrcode.js等。
然而Ionic2使用typescript,ts中是无法直接调用js的。这里网上给出了两种方案。
- 引入js文件,通过declarations.d.ts文件声明引用变量。
- 通过types库下载qrcode。
方案2并没有成功,方案1的具体过程以qrcode为例,如下:
- 从github下在需要的js文件,jquery.min.js和qrcode.js
- 文件复制到项目'/src/assets/js'目录下,js目录是自己新建的
- 在index.html中引入:
<script src="assets/js/jquery.min.js"></script> <script src="assets/js/qrcode.min.js"></script> - 在src目录下的declarations.d.ts中申明qrcode的方法变量:
declare var QRCode; - 完成以上步骤后,就可以在ts中调用qrcode的方法,例如在页面上显示一个文本转换的二维码:
<div id="qrImage" class="qrcode-image"></div>
let qrImage = document.getElementById('qrImage'); new QRCode(qrImage, 'test');
登录 | 立即注册