基于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. 拖拽js

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

  2. python中HTMLParser简单理解

    找一个网页,例如https://www.python.org/events/python-events/,用浏览器查看源码并复制,然后尝试解析一下HTML,输出Python官网发布的会议时间.名称和地 ...

  3. [转载]传智播客_SQL入门

    原文地址:传智播客_SQL入门作者:happylonger SQL * 数据定义语言 DDL * 数据操作语言 DML * 查询和更新指令构成了 SQL 的 DML 部分:  * SELECT - 从 ...

  4. Html5 audio stop

    //html5 stop audio play function stopPlay(el){ el.pause(); el.currentTime = 0; } 使用: var el = docume ...

  5. MongoDB自定义函数部分 定义及引用

    1. //定义一个Sum的函数 db.system.js.save({_id:"Sum", value:function(key,values) { ; ;i <values ...

  6. PeopleReady--办公学习类App产品

    PeopleReady是能使人(公司或组织里的员工)快速Ready(经验+知识)的学习系统.对员工的好处是:- 可以迅速Ready,尽快符合岗位要求,尽快有Performance,尽快对公司有价值,从 ...

  7. 关于activiti流程通过、驳回、会签、转办、中止、挂起等核心操作功能的封装

    http://blog.csdn.net/aochuanguying/article/details/7594197 package com.famousPro.process.service.imp ...

  8. Android系统中的dp和px的转换

    android系统中DP和SP的转化:1.首先分析TypedValue.java 可以调用以下代码获得dp的值 TypedValue.applyDimension(TypedValue.COMPLEX ...

  9. $.get

    $('#choice').change(function() { if($(this).val() != '') { $.get( 'data.php', { what: $(this).val() ...

  10. iOS开发——极光推送

    1.到极光官网 https://www.jpush.cn/ 下载极光推送SDK. 具体如何集成最好参考官网的文档,以及一些失败的原因.文档非常详细,我也是参考集成的. 2.到极光推送官网注册自己的应用 ...