基于ionic+angulajs的混合开发实现地铁APP

项目源码地址:https://github.com/zhangxy1035/SubwayMap

    一、项目简介

    在该项目中的地铁app是基于ionic+angularjs开发的一款软件,其中使用了高德地图的开放接口(地铁JS API)网址为:http://lbs.amap.com/api/subway-api/subway-summary/。在该app中主要实现了,地铁线路图的整体展示,起点终点设置,界面清空,线路查询,出发地与目的地线路查询等功能。本博文适合对ionic1有一定了解的人学习实践。具体可以参照ionic学习中文网址http://www.ionic.wang/

    二、项目演示

    项目中的界面风格总体比较清爽,界面如下:(以北京地铁为例)

    在上述图片中依次是,地铁图展示,起点终点设置,线路查询,以及出发地目的地查询。

    三、项目构建

    由于本项目所用的是ionic1,所以必须了解,ionic是如何创建项目的。

    首先在自己的电脑上必须安装ionic,然后到自己的项目目录下(以创建项目名称为subway为例),在cmd中运行如下命令

    ionic start subway    //创建名称为subway的项目

    cd subway        //进入subway目录下

    ionic platfrom add android  //添加android平台

    ionic build android      //在该平台下进行编译(提示一点,首次可以进行编译,但是当你每次修改完项目中的www文件时需要重新进行编译。)

    项目的目录如下图:

    其中www文件夹下,存储的为项目中的主要代码,包括css,js,html等。接下来为大家逐一介绍,每个文件夹以及重要的函数说明:(在这个项目中,博主start了一个新的ionic项目,其中的文件名称都是没有改过的,属于ionic 默认的tab布局以及tab中的文件名称。)这个www文件直接可以再本项目源码中下载查看。

    index.html

 

    其中在代码中有一个需要写入高德开发者的key,代码如下:

    <script src="http://webapi.amap.com/subway?v=1.0&key=你的key&callback=cbk"></script>

    其中的cbk可以进行修改,但是需要与js中引入的函数名称保持一致。

    具体key如何申请,请查看网站高德开发者接口文档:http://lbs.amap.com/

    接下来在如下图所示的文件中,代码中涉及了angularjs的双向绑定,以及如何引入高德的map等。

  

    app.js

    在此说明一点,在实际开发过程中home-tab可能会出现的顶部,解决的办法,就是将上述app代码中的.config中的代码进行复制,就不会出现这种问题。

    controller.js

 1 angular.module('starter.controllers', [])
2
3 .controller('DashCtrl', function($scope) {
4 var mysubway='';
5 window.cbk = function(){
6 mysubway = subway("mysubway",{
7 easy: 1,
8 adcode: '1100'
9 });
10
11 mysubway.event.on("subway.complete", function () {
12 // mysubway.addInfoWindow('南锣鼓巷');
13 var center = mysubway.getStCenter('南锣鼓巷');
14 mysubway.setCenter(center);
15 });
16 $scope.subwaycle = function () {
17 mysubway.clearInfoWindow();
18 mysubway.clearRoute();
19 }
20
21 console.log(mysubway);
22 };
23
24
25
26 })
27
28 .controller('ChatsCtrl', function($scope) {
29 window.cbk = function(){
30 var mysubway = subway("mysubway",{
31 easy: 1,
32 adcode: '1100'
33 });
34 $scope.subwayserch={
35 sub:''
36 };
37
38 mysubway.event.on("subway.complete", function () {
39 // var id = mysubway.getIdByName('8号线', 'line');
40 mysubway.showLine($scope.subwayserch.sub);
41 var $select_obj = document.getElementById('g-select');
42 // mysubway.setFitView($select_obj);
43 var center = mysubway.getSelectedLineCenter();
44 mysubway.setCenter(center);
45
46 });
47 $scope.subways = function(){
48 mysubway.clearInfoWindow();
49 mysubway.clearRoute();
50 mysubway.showLine($scope.subwayserch.sub);
51 var center = mysubway.getSelectedLineCenter();
52 mysubway.setCenter(center);
53 };
54 console.log(mysubway);
55 };
56
57 })
58
59 .controller('ChatDetailCtrl', function($scope, $stateParams, Chats) {
60 $scope.chat = Chats.get($stateParams.chatId);
61 })
62
63 .controller('AccountCtrl', function($scope) {
64 window.cbk = function(){
65 var mysubway = subway("mysubway",{
66 easy: 1,
67 adcode: '1100000'
68 });
69 $scope.person={
70 start:'北土城',
71 end:'天安门西'
72 }
73 $scope.start='北土城';
74 $scope.end='天安门西';
75 mysubway.event.on("subway.complete", function () {
76
77 mysubway.setStart($scope.person.start);
78 mysubway.setEnd($scope.person.end);
79
80 mysubway.route($scope.start, $scope.person.end, {
81 closeBtn: true
82 });
83 $scope.changeSE = function () {
84 mysubway.setStart($scope.person.start);
85 mysubway.setEnd($scope.person.end);
86 mysubway.route($scope.person.start, $scope.person.end, {
87 closeBtn: true
88 });
89 }
90 });
91 };
92
93 });

    tab-dash.html

1 <ion-view view-title="地铁图">
2 <div style="position:absolute;z-index: 1">
3 <div id="mysubway" style="width:auto;height: auto"></div>
4 <div style="margin-top:27rem;margin-right:5rem;position:absolute;z-index:1000">
5 <button class="button button-positive " ng-click="subwaycle()" ><b>清除</b></button>
6 </div>
7 </div>
8 </ion-view>

    tab-dash.html页面对应的是controller中的DashCtrl,这个页面中所定的需求主要是项目演示中的1图所示,可以进行起点终点的设置,并且在页面移动地铁图时,图上的“清除”按钮不会移动,当点击按钮之后,会直接清除地图上的所有路径设置,主要控制的代码为: mysubway.clearInfoWindow(); mysubway.clearRoute();这两个函数分别是清除信息窗口,清除路径。在页面设置上,为了使得按钮不会根据地图的移动而移动,设置了一个z-index,层级设置可以很好的对页面进行控制。

    接下来再介绍一下项目中的出发地与目的地查询界面。页面代码如下:

    tab-account.html

 1 <ion-view view-title="归去来兮">
2 <div style="position:absolute;z-index: 1">
3 <div id="mysubway" style="width:auto;height: auto"></div>
4 <div style="margin-top:3rem;margin-right:20rem;position:absolute;z-index:1000;">
5 <input type="text" ng-model="person.start" style="color: #4d4d4d" placeholder="起点">
6 <input type="text" ng-model="person.end" placeholder="终点">
7 <button class="button button-positive " ng-click="changeSE()" ><b>确认</b></button>
8 </div>
9 </div>
10 </ion-view>

    其中tab-account.html页面的控制器是AccountCtrl,在controller的代码中

    mysubway.setStart($scope.person.start);//设置起点
    mysubway.setEnd($scope.person.end);//设置终点

    mysubway.route($scope.start, $scope.person.end, {closeBtn: true});//根据所设置的起点终点绘制路线。

    controlle.js中的代码比较重要,其中包含了如何显示地图,以及如何控制双向绑定,在这里给大家提醒一点,angularjs的双向绑定有时候会莫名其妙的出现问题,用下面这种方法就可以很好的避免,页面中引用的时候{{subwayserch.sub}},或者ng-model=subwayserch.sub,这样便不会出现问题。

1  $scope.subwayserch={
2 sub:''
3 };

    四、项目总结

    就本项目而言,只是实现了较少的功能,具体的可以参考高德的开发接口。根据开发接口在本项目的基础上可以实现更多的功能。看到本博文感兴趣的快去实践吧。参考资料如下:ionic学习网站:http://www.ionic.wang/,高德开发者接口网站:http://lbs.amap.com/

ionic+angulajs的更多相关文章

  1. 基于ionic+angulajs的混合开发实现地铁APP

    基于ionic+angulajs的混合开发实现地铁APP 注:本博文为博主原创,转载时请注明出处. 项目源码地址:https://github.com/zhangxy1035/SubwayMap 一. ...

  2. ionic第二坑——ionic 上拉菜单(ActionSheet)安卓样式坑

    闲话不说,先上图: 这是IOS上的显示效果,代码如下: HTML部分: <body ng-app="starter" ng-controller="actionsh ...

  3. ionic第一坑——ion-slide-box坑(ion-slide分两页的坑)

    ionic.views.Slider = ionic.views.View.inherit({ initialize: function (options) { . . . function setu ...

  4. ionic之$ionicGesture手势(大坑)

    鄙人来本公司前未用过ionic框架,但由于ionic是基于angularjs封装的,正好我用过angularjs,很荣幸的面试就过了,然后通过该网站http://www.ionic.wang(后面简称 ...

  5. Ionic2系列——Ionic 2 Guide 官方文档中文版

    最近一直没更新博客,业余时间都在翻译Ionic2的文档.之前本来是想写一个入门,后来觉得干脆把官方文档翻译一下算了,因为官方文档就是最好的入门教程.后来越翻译越觉得这个事情确实比较费精力,不知道什么时 ...

  6. Win10 UWP开发系列:使用VS2015 Update2+ionic开发第一个Cordova App

    安装VS2015 Update2的过程是非常曲折的.还好经过不懈的努力,终于折腾成功了. 如果开发Cordova项目的话,推荐大家用一下ionic这个框架,效果还不错.对于Cordova.PhoneG ...

  7. Ionic 简单操作

    在使用 Ionic 之前要安装 Nodejs,Cordova . Java 下载Java 网站.Java 默认安装在 C:\Program Files\Java 文件目录. Android 下载And ...

  8. 【初探IONIC】不会Native可不可以开发APP?

    前言 Hybrid技术流行已经有一段日子了,楼主的关注点也一直围绕着移动端围绕着Hybrid相关展开,Hybrid已经是大大提升开发效率的开发方式了,但是仍然需要至少一个IOS与Andriod,那么可 ...

  9. 一个简单移动页面ionic打包成app

    先贴JS代码好了,缓动和调整透明度的功能,最后用ionic打包成应用就可以 window.onload=function(){ search(); move(); calc();}function s ...

随机推荐

  1. Objective-C中系统宏的用法总结

    先说一下本文中会提到的内容:##,__VA_ARGS__, __FILE__, __LINE__ , __FUNCTION__等 宏变量: 先举一个例子,会用到上面这些宏: #define mypri ...

  2. 工作中遇到的UIScrollview的问题及解决方案

    用scrollview的时候,记得创建scrollview后再在scrollview上放一个view,将其他子空间和子view都放在这个view上. 目前遇到的问题: ImagePlayerView( ...

  3. Android_Intent_data_type

    layout.xml <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" x ...

  4. Struts2的工作流程

    Struts2如何实现MVC Struts2的参数封装: Struts2的运行原理图:

  5. Javascript日期处理类库Moment.js

    1.组件详情地址Moment.js中文网 http://momentjs.cn/ 2.几个方法: (1) 日期格式化 moment().format(); // 2016-02-29T14:03:30 ...

  6. Hadoop MapReduceV2(Yarn) 框架简介

    http://www.ibm.com/developerworks/cn/opensource/os-cn-hadoop-yarn/ 对于业界的大数据存储及分布式处理系统来说,Hadoop 是耳熟能详 ...

  7. 【MINA】用protobuf做编解码协议

    SOCKET协议 支持java serial 与 AMF3的混合协议,目前没有基于xml 与 json的实现. 协议说明: * 9个字节协议头+协议体. * * 协议头1-4字节表示协议长度 =协议体 ...

  8. 在线HTML编辑器 kindeditor-4.1.10 上传图片文件 应用指南

    1.在ASPX页面中对应的head.body添加相应的红色部分 2.引用kindeditor-4.1.10中的litjosn.dll 3.在写入数据库时要替换相应的路径和IP 4.kindeditor ...

  9. Controller中利用RedirectToRoute重定向的问题

    先看看我们例子用到的路由表 routes.MapRouteWithName( name: "ProductDetail", url: "{Platform}/Produc ...

  10. 配置WindowsLiveWriter,写cnblogs博客

    转载:http://www.haogongju.net/art/2307587 引言 以前写博客一般都是联网在cnblogs上面写,不好的地方就是不联网就写不了,当然我们也可以先记录在word文件,等 ...