ionic+cordova+angularJs

这里详细介绍下如何用ionic+cordova+angularjs搭建自己的移动端app,包括环境搭建,框架使用等,具体项目已放置在github上,可下载下来自行启动。

下载地址:https://github.com/foreverjiangting/myApp/tree/master/myApp

一:环境搭建

1.配置java的运行环境,包括path变量的路径,这里不再详细讲解,请自行百度。

2.下载Android  Studio,并配置path变量,以及sdk路径。这个下载比较麻烦,请自行去官网下载

1
2
C:\Program Files (x86)\Android\android-sdk\tools;
C:\Program Files (x86)\Android\android-sdk\platform-tools;

3.  安装node.JS的安装。下载地址:https://nodejs.org/download/

4.  安装ionic 和cordova。请参考官网:http://ionicframework.com/getting-started/

5.  打开cmd,进入命令行,注意是在cmd进入的哦,不是git  bash里面进入。

1
npm install -g ionic

  安装成功后查看一下版本,继续安装cordova。

1
npm install -g cordova

6.  开始创建ionic项目,输入一下命令。

1
ionic start myApp tabs

  进入myApp该项目目录,输入  ionic  serve,即可以成功的在浏览器中进行浏览。这个是我自己设计的APP首页页面,启动成功后看到的效果。

         

7.如何编译并发布应用?

   当你已经顺利完成你的应用代码部分的时候,你现在所需要的就是将你的应用打包并且发布了。
第一步:创建一个独一无二的图标。创建好你的图标之后,请以png/psd/AI格式保存在resource/android/icon.png和resource/android/icon.png。
然后使用如下命令,就可以生成不同尺寸的图标。
1
$ ionic resources -icon
   第二步:创建启动页面图片。启动画面的源文件至少需要2208px×2208px,创建完成后,保存为resource/android/splash.png和resource/android/splash.png。
然后使用如下命令就可以生成不同尺寸的启动画面图片: 
1
$ ionic resources --splash
    看下我创建的启动图片:
    第三步:编译Android应用(这里以安卓应用为例)。
1:配置应用的签名。使用如下命令来配置你的签名(keystore)
1
$ keytool -genkey -v -keystore my_jt.keystore -alias my_jt -keyalg RSA -keysize 2048 -validity 10000
   注意:请使用你应用的名字来替代my_jt这个命令可以生成一个新文件,在本示例中为my_jt.keystore。 在应用的整个生命周期中将重复使用同一个keystore,请保存好它。
2:使用Cordova编译应用。使用build命令编译一个应用的发布版本:
1
$ cordova build --release android
   这个命令会生成一个新的apk文件。此时还未签名。
3:签名应用文件。现在我们要用之前创建的keystore文件来签名生成的未签名版本的应用。使用如下命令来签名:
1
$ jarsigner -verbose -sigalg SHALwithRSA -digestalg SHAL -keystore my_jt.keystore unsigned_name.apk my_jt
   注意:这里请使用keystore生成文件名来替换my_jt示例名称,同时用真实的应用文件名替换掉unsigned_name.apk。
这个过程需要一点时间,期间会提示输入keystore的密码。命令会修改apk文件并对其进行签名。

OK,需要的环境都已经配置好了,也可以启动成功,但是以上五个步骤中,不一定都是很顺利的,这里总结一下自己的问题,并给出自己的解决方案。

二:安装遇到的问题

1.进行android 平台配置时候报错。即执行下面命令,这里的命令是指,将本地的APP打包成Hybrid  App时的基于安卓平台,进行的编译。

1
ionic platform add android

   这里会刚开始安装出问题,显示,android版本过低,解决办法,重新下载一个sdk版本。

    

2.确保你安装后,ionic的文件一个不少,如上所示,碰到问题,当时安装时候,没有ionic.config.json文件。解决办法,自己新建一个ionic.config.json文件

1
2
3
4
{
  "name""myApp",
  "app_id"""
}

  将以上内容添加进去即可。不过name要换成你自己的项目目录名称。

3. 进行安卓打包时,编译成apk文件,即执行下面命令时碰到问题。

1
ionic build android

    由于很多东西是从google下载来了,打包会很慢很慢,(等的花儿都谢了)

三:项目规范问题

这里总结一下导师昨天验收demo时候,指出的几个问题。

1:angularjs书写controller时候,注意要将参数写进数组里面。

看下我的写法是下面这样的:

1
2
3
4
5
6
7
8
9
10
.controller('PlaylistsCtrl'function($scope) {
         $scope.playlists = [
               { title: 'Reggae', id: 1 },
               { title: 'Chill', id: 2 },
               { title: 'Dubstep', id: 3 },
               { title: 'Indie', id: 4 },
               { title: 'Rap', id: 5 },
               { title: 'Cowbell', id: 6 }
        ];
})

 这种写法是有问题的,在进行打包时候,会出问题。正确写法应该是下面这种。将参数和函数写在数组里面。

1
2
3
4
5
6
7
8
9
10
.controller('PlaylistsCtrl',['$scope'function($scope) {
           $scope.playlists = [
               { title: 'Reggae', id: 1 },
               { title: 'Chill', id: 2 },
               { title: 'Dubstep', id: 3 },
               { title: 'Indie', id: 4 },
               { title: 'Rap', id: 5 },
               { title: 'Cowbell', id: 6 }
          ];
}])

 2. 我在进行书写时候,没有将服务和控制器进行分开,而是混合写的,而且是单页面进行路由转换,导师指出这样是会存在很多问题的,通常当页面很多时候,几百个

甚至几千个时候,单页面加载的速度是相当缓慢的,后期需要进行改进。像我下面这种将控制器和服务混合写是不规范的。

1
2
3
4
5
6
7
8
9
10
.controller('browseCtrl', ['$scope''$stateParams','$http','$ionicScrollDelegate','$location','$filter',
  function($scope, $stateParams,$http,$ionicScrollDelegate,$location,$filter) {
      $scope.requestDate = function() {
        $http.get("../data/browse.json").success(function(data) {
             console.log("请求全部的数据");
             console.log(data);
             $scope.data = data;
        });
      }
}])

四:总结

从开始零搭建到现在这个APP有一定的模型,从功能,到页面设计,差不多花了四天左右的时间,与后端的联调也能够跑通。么么哒,接下来的两周时间,在保证基本功能前提下,设计

各方面需要继续完善,优化。哈哈,很喜欢这种调调,自己边设计,边做。。。还有好些页面,功能没写,继续。最终完整版APP请看我github里面的更新(暂未完成版)。

       

这里贴下自己主页和列表页的代码部分:

主页部分:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
<ion-side-menus enable-menu-with-back-views="false">
  <ion-side-menu-content >
    <ion-nav-bar class="bar-stable">
      <ion-nav-back-button>
      </ion-nav-back-button>
 
      <ion-nav-buttons side="left">
        <button class="button button-icon button-clear ion-navicon" menu-toggle="left">
        </button>
      </ion-nav-buttons>
    </ion-nav-bar>
    <ion-nav-view name="menuContent"></ion-nav-view>
  </ion-side-menu-content>
 
  <ion-side-menu side="left" class="set-side-menu">
     
 
    <ion-content class="set-background">
      <div  clas="set-menu-login" style="text-align: center;margin-top: 55px;cursor:pointer;" ng-click="login()">
           <div class="set-img-login" style="margin-left: 32%;">
               
           </div>
           <p style="margin-top:19px;font-size: 17px;">请登录账号</p>
 
      </div>
      <ion-list>
          <div class="list set-list-menu" style="line-height: 60px;margin-top: 40px;">
              <ion-item menu-close href="#/app/personInfo" >
                <i class="icon ion-person" ></i>
                <span class="set-menu-icon"> 个人中心</span>
              </ion-item>
              <ion-item menu-close href="#/app/playlists">
                <i class="icon ion-calendar"></i><span class="set-menu-icon">投票首页</span>
              </ion-item>
              <ion-item menu-close href="#/app/browse">
                 <i class="icon ion-pinpoint"></i><span class="set-menu-icon"> 试题资料</span>
              </ion-item>
              <ion-item menu-close href="#/app/personCenter">
                 <i class="icon ion-star"></i><span class="set-menu-icon"> 个人收藏</span>
              </ion-item>
              <ion-item menu-close href="#/app/set">
                 <i class="icon ion-locked"></i><span class="set-menu-icon"> 个人设置</span>
              </ion-item>
          </div>
      </ion-list>
    </ion-content>
  </ion-side-menu>
</ion-side-menus>

列表页部分:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
<ion-view view-title="问卷列表">
 
    <ion-content on-scroll="scrollFixed(e)" >
 
            <div  class="set-btn-all" id="set-btn-all">
                    <button  type="button"  class="set-all-list l1 "  ng-click="requestDate()" id="btn1">全部 </button>
                    <button  type="button"  class="set-all-list l2"  ng-click=requestComplete() id="btn2">已完成 </button>    
                    <button  type="button"  class="set-all-list l3"  ng-click=requestInComplete() id="btn3">未完成 </button>
                    <button  type="button"  class="set-all-list l4"  ng-click=requestDoing() id="btn4">进行中 </button>
            </div>
                 
            <ion-list>                   
                        <ion-item ng-repeat="value in data" href="#/app/timuList/{{value.id}}">                                             
                                <div class="item item-avatar">
                                        <img ng-src="{{value.url}}">
                                        <h3 style="color: #999;">
                                           <span> {{value.text}} </span>
                                        </h3>
                                        <h3 class="set-wenjuan-list" style="color: #ccc;margin-top: 15px;">
                                            有效期:{{value.timeDate}}
                                            <span class="set-tagComplete">{{value.status}}</span>
                                            <span class="set-tagComplete btn-detail">查看详情</span>
                                        </h3>
 
                                </div>
                        </ion-item>                       
            </ion-list
            <div  class="set-tips-message">
                    <p>已经到底了</p>
             </div>
             
            <div class="fs_top_btn" ng-click="scrollTop()">
                 
            </div>
     
    </ion-content>
    <ion-footer-bar align-title="left" class="">
            <div class="tabs tabs-icon-left">
                  <a class="tab-item" href="#/app/playlists  ">
                    <i class="icon ion-home"></i>
                    首页
                  </a>
                  <a class="tab-item" href="#/app/personCenter">
                    <i class="icon ion-star"></i>
                    收藏
                  </a>
                  <a class="tab-item" href="#/app/set">
                    <i class="icon ion-gear-a"></i>
                    
                  </a>
            </div>   
    </ion-footer-bar>
</ion-view>

 主页和列表页已完成,比较头疼的还是设计,感觉总是达不到自己想要的效果,有比较好的想法亲,麻烦给我留言哈!谢谢哒!!!!!!!!!!


作者:婷风

出处:http://www.cnblogs.com/jtjds/p/6056719.html

ionic+cordova+angularJs的更多相关文章

  1. 基于ionic+cordova+angularJs从零开始搭建自己的移动端H5 APP

    这里详细介绍下如何用ionic+cordova+angularjs搭建自己的移动端app,包括环境搭建,框架使用等,具体项目已放置在github上,可下载下来自行启动. 下载地址:https://gi ...

  2. ionic + cordova+angularJs 搭建的H5 App完整版总结

      为期半个月的项目实践开发,已完整告一段落,团队小组获得第一名,辛苦总算没有白费,想起有一天晚上,整个小组的人,联调到12点才从公司回去,真是心酸.这里总结一下,项目过程中遇到的问题 和感悟.哈哈, ...

  3. ionic+cordova+angularJs监听刷新

    普通的js返回并刷新这里就不多说了,百度就有很多方法. 下面说的是使用了angularjs.ionic开发的一个手机app中我使用的返回上一页并刷新的方法. 场景:回复的页面是单独的,点击保存回复后会 ...

  4. 搭建 AngularJS+Ionic+Cordova 开发环境并运行一个demo

    目前的手机APP有三类:原生APP,WebAPP,HybridApp:HybridApp结合了前两类APP各自的优点,越来越流行. Cordova就是一个中间件,让我们把WebAPP打包成Hybrid ...

  5. Cordova+Angularjs+Ionic 混合开发入门讲解

    作为一名学习Android开发的学生,对于移动开发的发展趋势颇为关注,大家都知道,现在原生的移动开发在企业上基本很少使用了,大部分企业为了降低成本,选择了webapp,hybrid(混合开发)这两种模 ...

  6. ionic cordova plugin 安装和使用

    注意事项 ionic1需要ng-cordova plugin的使用都需要放到deviceready事件的回调中, 设备准备好了才能设备交互 plugin只有在真机上才有效果, 模拟器(部分)和brow ...

  7. androidAndroid开发学习--Ionic+Cordova 环境搭建

    我们看 Ionic 能给我们提供什么?  一个样式库,你可以使用它 来 装饰你的 HTML 网页 ,看起来 想 移动程序的 界面,什么 header .content.footer.grid.list ...

  8. Ionic + Cordova 跨平台移动开发环境配置

    1.下载安装JDK(根据各自系统选择32位或64位下载),安装完成之后需要做以下环境变量配置 在“系统变量”中,设置3象属性,JAVA_HOME,PATH,CLASSPATH(大小写无所谓),如果已经 ...

  9. npm 安装 ionic cordova

    针对npm安装 ionic 和 cordova 过程很慢,且有些安装文件被墙的问题,使用如下方式解决: 1)安装cnpm npm install -g cnpm 2)然后再使用cnpm 安装 ioni ...

随机推荐

  1. Volume serial number could associate file existence on certain volume

    When it comes to lnk file analysis, we should put more emphasis on the volume serial number. It coul ...

  2. oracle 强杀进程

    在ORACLE数据库当中,有时候会使用ALTER SYSTEM KILL SESSION 'sid,serial#'杀掉一个会话进程,但是使用这个SQL语句杀掉会话后,数据库并不会立即释放掉相关的资源 ...

  3. ubuntu12.04 下安装matlab2012

    1.下载matlab2012a(例如:****.iso) 2.创建挂载目录 sudo mkdir /media/matlab 3.将当前目录切换到镜像文件的目录,然后将镜像文件挂载到刚刚创建的目录下 ...

  4. aspx页面与服务器控件间运行原理

    一.进入服务器控件以及aspx页面前,必须的准备: a)在WebForm 中只要带有runat="server" 那么那就是一个控件. b)如果form有runat="s ...

  5. Cassandra 备份 - 1 - 节点镜像恢复

    之前比较关注如何使用Cassandra,但是真正想大规模使用前提还是需要搞清楚备份机制,确保数据安全. 本文主要内容来自文档 "Cassandra2.2"的翻译.最后部分为真实操作 ...

  6. spark-submit工具参数说明

    执行时需要传入的参数说明 Usage: spark-submit [options] <app jar | python file> [app options] 参数名称 含义 --mas ...

  7. Java实现抽奖游戏

    代码如下: import java.io.*; public class PresentDemo { /** * @param args */ public static void main(Stri ...

  8. “Unable to resolve target 'android-9'”的问题

    SDK版本问题! 如果导入时,eclipse的console中提示信息:“Unable to resolve target 'android-9'” 可能的问题就是你安装的SDK版本高于项目的版本!( ...

  9. MSSQL 所有表中模糊查询

    --搜索指定数据在那个对象中存在.txt(所有表中模糊查询) CREATE PROC sp_ValueSearch @value sql_variant, --要搜索的数据 @precision bi ...

  10. 批量kill进程

    ps -e | grep java |awk '{print $1}'|xargs kill -9