基于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. CSS3 动态魔方的展示

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. Hibernate - list()和iterate()的区别

    list()和iterate()都可以用来获得Query取得的HQL结果list()使用的是即时加载.查询时会之前去数据库查询HQL并将所有结果存在缓存中.iterate()使用的是延时加载.查询时只 ...

  3. tomcat服务器使用简介

    tomcat服务器的应用与部署:1:下载tomcat服务器可以到http://tomcat.apache.org/下载apache服务器,左侧有各种版本的服务器,可以根据自己的需要下载,如果是是Lin ...

  4. java.lang.ClassFormatError: Illegal UTF8 string in constant pool in class file Server/Request

    Linux服务器上,将本地编译好的文件上传后,Tomcat启动时报错: Exception in thread "Thread-2" java.lang.ClassFormatEr ...

  5. [转]ORACLE 异常错误处理

    本文转自:http://www.cnblogs.com/soundcode/archive/2012/01/10/2318385.html 本篇主要内容如下: 5.1 异常处理概念 5.1.1 预定义 ...

  6. 关于Http协议的解析

    HTTP概述 HTTP(hypertext transport protocol),即超文本传输协议.这个协议详细规定了浏览器和万维网服务器之间互相通信的规则. HTTP就是一个通信规则,通信规则规定 ...

  7. 【转】周末班LR笔记总结—新手入门必备

    本来想上传文件的,上传半天没反应,只有这样了,图片不知道能显示不. 上午 学到2012.1.13 七天课 第一天(入门)二.三.四天(VUGEN脚本) 五天(Controller)六天(Analyse ...

  8. 浅谈用java解析xml文档(三)

    接上一篇,本文介绍使用JDOM解析xml文档, 首先我们还是应该知道JDOM从何而来,是Breet Mclaughlin和Jason Hunter两大Java高手的创作成果,2000年初, JDOM作 ...

  9. dirname(__FILE__) 的使用总结

    dirname(__FILE__) php中定义了一个很有用的常数,即 __file__ 这个内定常数是当前php程序的就是完整路径(路径+文件名). 即使这个文件被其他文件引用(include或re ...

  10. 【MINA】序列化和反序列化我们要考虑的问题

    概念 序列化:将java对象转换为字节序列的过程叫做序列化 反序列化:将字节对象转换为java对象的过程叫做反序列化 要解决的问题 1.序列化时间 2.反序列化时间 3.bytes大小 4.操作方便 ...