ionic2简单分析
Angular2是一个全新的框架,它从ReactJS以及其他web移动框架借鉴了不少经验和优点,巨大的改进使得开 发体验和性能已经超越了Angular1,而且Ionic2无论是从UI交互效果和跨平台的差异性都优于Ionic1
1. 安装使用
ionic2的安装运行基本和前版本的ionic基本一致,非常简单。
npm install -g ionic # 安装ionic工具集
ionic start projectName --v2 # --v2表示使用ionic2 + angular2的组合方式创建项目,否则使用ionic + angular创建项目,此时ionic会下载所需要的相关包
cd projectName # 进入创建的项目名称目录
ionic serve # 启用浏览器调试应用页面,这时通过浏览器打开默认端口页面http://localhost:8100/#/tab/dash就可以打开应用页面了
2. 和ionic的区别
ionic2是建立在angular 2上的,angular 2推荐使用typescript进行项目的开发,所以到了ionic2,就可以这样来开发我们的项目了。一般情况下,我们创建应用完成后,www/目录为我们页面的源代码。其目录结构如下:
- + www/
- + css/
- + img/
- + js/
- + lib/
- + templates/
- + index.html
- + manifest.json
- + service-worker.js
我们以www/js/app.js为例。
- // 入口JavaScript文件,配置页面路由与加载的视图
- // ionic版本写法
- .config(function($stateProvider, $urlRouterProvider) {
- $stateProvider.state('tab', {
- url: '/tab',
- abstract: true,
- templateUrl: 'templates/tabs.html'
- }).controller('MainCtrl', function($scope){
- $scope.data ={
- text: 'Hello World'
- }
- }
- )
- });
- // ionic 2写法
- @Component({
- templateUrl:'main/main.html'
- });
- export class MainCmp {
- constructor(){
- this.data ={
- text: 'Hello World'
- }
- }
- }
templates/tabs.html的内容如下。
- <ion-content ng-controller="MainCtrl">
- <ion-item>
- </ion-item>
- </ion-content>
ionic2里面里可以这样来适应原来的版本:
- <ion-content ng-controller="MainCtrl as main">
- <ion-item>
- </ion-item>
- </ion-content>
值得注意的是,这里 <ion-content>
等为ionic-angular提供的组件模块,它类似于Webcomponent的方式,能被angular识别解析。通俗的理解就是一个类似bootstrap的UI组件库。
3、组件
ionic2除了提供统一便捷式APP打包的解决方案,还提供了一个用于移动端的UI组件库。其实类似的组件库有很多,bootstrap、frozenui、wui等等,但是与其它框架提供UI组件不同的是,ionic2提供的组件规范是面向未来Webcomponent的方式实现的。
例如对于一个对话框组件,一般的UI框架可能这样来实现,相信类似的框架大家多少用过。这里以frozenui为例,一般通过对元素添加不同的class名称来控制组件的样式和显示,而像 ui-dialog
这些类名是UI库统一定义好的。
- <div class="ui-dialog">
- <div class="ui-dialog-cnt">
- <header class="ui-dialog-hd ui-border-b">
- <h3>新手任务</h3>
- <i class="ui-dialog-close" data-role="button"></i>
- </header>
- <div class="ui-dialog-bd">
- <h4>标题标题</h4>
- <div>这是标题的内容!</div>
- </div>
- <div class="ui-dialog-ft">
- <button type="button" data-role="button">取消</button>
- <button type="button" data-role="button">开通</button>
- </div>
- </div>
- </div>
- <script class="demo-script">
- $(".ui-dialog").dialog("show");
- </script>
但是使用ionic2,你可能会这样来使用,在这里,我们没有去对模块元素添加一些样式的类,因为angular2将自定义组件标签 ion-header
对应的CSS已经通过Webcomponent的形式引入了,那么我们只用管怎样使用结构层结构就可以了,但是这里注意的是 primary block
等类名没有添加到class中。
- <ion-header>
- <ion-navbar>
- <ion-title>Confirm</ion-title>
- </ion-navbar>
- </ion-header>
- <ion-content padding>
- <button primary block (click)="doConfirm()">确认对话框</button>
- </ion-content>
- <script>
- import { AlertController } from 'ionic-angular';
- export class MyPage {
- constructor(public alertCtrl: AlertController) {}
- showConfirm() {
- let confirm = this.alertCtrl.create({
- title: '标题标题',
- message: '这是标题的内容',
- buttons: [{
- text: '取消',
- handler: () => {
- console.log('取消');
- }
- }, {
- text: '确定',
- handler: () => {
- console.log('A确定');
- }
- }]
- });
- confirm.present();
- }
- }
- </script>
其它的相关组件的方式类似,同时你也可以去自定义遵循Webcomponent的element 组件。
更多API: http://ionicframework.com/docs/v2/components/#alert-prompt
4.模板的语法结构
ionic2的模板语法与Ionic1非常相似,但是看起来又有点古怪,其实Ionic2的模板语法更为简洁。我们来看一下对比。
ionic1:
<img ng-src="{{photo.image}}" />
- ionic2:
<img [src]="photo.image" />
我们看一下 事件调用:
- ionic1:
<button ng-click="doSomething()">
- ionic2:
<button (click)="doSomething()">
5.它仅仅是javascript而已
ionic1和angular1都有一些特定的语法,但是追其根本只不过是javascript
但是从使用上,EM6/ TS能够让你避免很多问题,比如说:
jsvascript:
this.someData = null;
var me = this;
doSomething(function(data){
me.someData = data;
});
看到了么?你问了使用this指针,不得不在函数外面作为变量me的引用,但是你使用了EM6:
this.someData = null; doSomething((data) => { this.someData = data; })
6、native交互
当然,ionic2还提供了与Native客户端的相互调用能力,前端相关的一套JavaScript调用库被称为Ionic Native。如果在你的APP需要调用Native调用能力。现需要安装引入对应的模块,一边在分析打包时引入。
- npm install ionic-native --save
调用时就可以这样来使用。
- import {Geolocation} from 'ionic-native';
- Geolocation.getCurrentPosition().then(pos => {
- console.log('lat: ' + pos.coords.latitude + ', lon: ' + pos.coords.longitude);
- });
- let watch = Geolocation.watchPosition().subscribe(pos => {
- console.log('lat: ' + pos.coords.latitude + ', lon: ' + pos.coords.longitude);
- });
- // to stop watching
- watch.unsubscribe();
使用ionic2也可以使用ES6+的方式来实现。
- // ES6 / TypeScript / Ionic 2 / Angular 2
- import {Camera} from 'ionic-native';
- this.platform().then(() => {
- Camera.getPicture().then(
- res => console.log("We have taken a picture!"),
- err => console.error("Error taking picture", err)
- );
- });
具体更多API: http://ionicframework.com/docs/v2/native/
7、主题与图标
如果你需要改变ionic2 UI组件库的显示风格,你也可以自定义自己的APP样式。方法也很简单,ionic2 的UI组件库样式引用了通用的样式变量,在 app/theme/app.variables.scss 里面修改响应的颜色和字体值就可以了。这点和其它UI框架是一样的。当然你也可以修改保存多个主题风格的变量文件,以供选择使用。
$colors: ( primary: #387ef5; secondary: #32db64; danger: #f53d3d; light: #f4f4f4; dark: #222; );
对于图标的话就没什么讲的了,和fontawsome一样,ionic2给了UI框架自带的可选图标,大家可以根据下面的文档说明选择使用。
图标参考: http://ionicframework.com/docs/v2/ionicons/
8、总结
总结来看,ionic2不仅为我们提供了打包前端页面应用的解决方案,还为我们提供了一整套的UI组件库,而且组件均使用Web Component规范来实现,开发体验有了较好的改善。
更多API: http://ionicframework.com/docs/v2/
ionic2简单分析的更多相关文章
- 简单分析JavaScript中的面向对象
初学JavaScript的时候有人会认为JavaScript不是一门面向对象的语言,因为JS是没有类的概念的,但是这并不代表JavaScript没有对象的存在,而且JavaScript也提供了其它的方 ...
- CSipSimple 简单分析
简介 CSipSimple是一款可以在android手机上使用的支持sip的网络电话软件,可以在上面设置使用callda网络电话.连接使用方式最好是使用wifi,或者3g这样上网速度快,打起电话来效果 ...
- C#中异常:“The type initializer to throw an exception(类型初始值设定项引发异常)”的简单分析与解决方法
对于C#中异常:“The type initializer to throw an exception(类型初始值设定项引发异常)”的简单分析,目前本人分析两种情况,如下: 情况一: 借鉴麒麟.NET ...
- 透过byte数组简单分析Java序列化、Kryo、ProtoBuf序列化
序列化在高性能网络编程.分布式系统开发中是举足轻重的之前有用过Java序列化.ProtocolBuffer等,在这篇文章这里中简单分析序列化后的byte数组观察各种序列化的差异与性能,这里主要分析Ja ...
- 简单分析Java的HashMap.entrySet()的实现
关于Java的HashMap.entrySet(),文档是这样描述的:这个方法返回一个Set,这个Set是HashMap的视图,对Map的操作会在Set上反映出来,反过来也是.原文是 Returns ...
- Ffmpeg解析media容器过程/ ffmpeg 源代码简单分析 : av_read_frame()
ffmpeg 源代码简单分析 : av_read_frame() http://blog.csdn.net/leixiaohua1020/article/details/12678577 ffmpeg ...
- FFmpeg的HEVC解码器源码简单分析:解析器(Parser)部分
===================================================== HEVC源码分析文章列表: [解码 -libavcodec HEVC 解码器] FFmpeg ...
- FFmpeg资料来源简单分析:libswscale的sws_getContext()
===================================================== FFmpeg库函数的源代码的分析文章: [骨架] FFmpeg源码结构图 - 解码 FFmp ...
- wp7之换肤原理简单分析
wp7之换肤原理简单分析 纠结很久...感觉勉强过得去啦.还望各位大牛指点江山 百度找到这篇参考文章http://www.cnblogs.com/sonyye/archive/2012/03/12/2 ...
随机推荐
- 【技巧】EasyUI分页组件pagination显示项控制
我们使用easyui分页时,分页组件显示项有很多,默认如下是这样的: 有时候我们并不想显示这么多控制项,我们可以通过属性来控制:如下来自EasyUI官网: 如下写法,在datagrid中使用,如下控制 ...
- 开发部署项目时出现:java.lang.OutOfMemoryError: PermGen space
java.lang.OutOfMemoryError: PermGen space 错误: 原文地址:http://www.cnblogs.com/shihujiang/archive/2012/06 ...
- 三种Webpack打包方式
准备工作mkdir webpack_demo && cd webpack_demo #新建文件夹npm init #创建package.json文件npm install --save ...
- bzoj2369
题解: 显然把每一个环求出来 然后做一个lcm即可 代码: #include<cstdio> using namespace std; ],f[],n; int gcd(int x,int ...
- SSM中的Mybatis的操作
一:整合日志含有log4j和logback logback是log4j的升级版他性能提升较大,有些甚至达到10倍以上,占的内存更小,slf4j能很好的整合它,还有很多数不胜数的优势 1.下载jar包, ...
- git删除远程文件夹
git rm -r -n --cached "bin/" //-n:加上这个参数,执行命令时,是不会删除任何文件,而是展示此命令要删除的文件列表预览. git rm -r --ca ...
- .NET快速开发平台免费版预发布
自己团队开发的一套软件,可通过配置完成列表.表单.流程等的快速开发,因项目原因有一段时间没更新了,准备发出来希望能帮助更多企业快速实现信息化. 该软件主要应用的技术有如下: 1.存储:采用SqlSer ...
- this的学习
面试经常被问到this的问题,每次回答都感觉回答的不尽人意,今天周六就在家好好研究this的问题 1.function定义的时候this的指向是无法确定的,执行function的时候才知道this的指 ...
- SharePoint Framework解决方案管理参考(二)
博客地址:http://blog.csdn.net/FoxDave 使用外部脚本 在使用现有的JavaScript脚本库时,开发者可以选择将它们包含在web部件代码包中,或者从外部的URL加载.从外部 ...
- js 获取字符串中所有的数字和汉字
var re1 = /(\d{1,3})+(?:\.\d+)?/g var re2 = /[\u4e00-\u9fa5]{2,}/g var str="11我22们33两个"; v ...