ionic+angulajs
基于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的更多相关文章
- 基于ionic+angulajs的混合开发实现地铁APP
基于ionic+angulajs的混合开发实现地铁APP 注:本博文为博主原创,转载时请注明出处. 项目源码地址:https://github.com/zhangxy1035/SubwayMap 一. ...
- ionic第二坑——ionic 上拉菜单(ActionSheet)安卓样式坑
闲话不说,先上图: 这是IOS上的显示效果,代码如下: HTML部分: <body ng-app="starter" ng-controller="actionsh ...
- ionic第一坑——ion-slide-box坑(ion-slide分两页的坑)
ionic.views.Slider = ionic.views.View.inherit({ initialize: function (options) { . . . function setu ...
- ionic之$ionicGesture手势(大坑)
鄙人来本公司前未用过ionic框架,但由于ionic是基于angularjs封装的,正好我用过angularjs,很荣幸的面试就过了,然后通过该网站http://www.ionic.wang(后面简称 ...
- Ionic2系列——Ionic 2 Guide 官方文档中文版
最近一直没更新博客,业余时间都在翻译Ionic2的文档.之前本来是想写一个入门,后来觉得干脆把官方文档翻译一下算了,因为官方文档就是最好的入门教程.后来越翻译越觉得这个事情确实比较费精力,不知道什么时 ...
- Win10 UWP开发系列:使用VS2015 Update2+ionic开发第一个Cordova App
安装VS2015 Update2的过程是非常曲折的.还好经过不懈的努力,终于折腾成功了. 如果开发Cordova项目的话,推荐大家用一下ionic这个框架,效果还不错.对于Cordova.PhoneG ...
- Ionic 简单操作
在使用 Ionic 之前要安装 Nodejs,Cordova . Java 下载Java 网站.Java 默认安装在 C:\Program Files\Java 文件目录. Android 下载And ...
- 【初探IONIC】不会Native可不可以开发APP?
前言 Hybrid技术流行已经有一段日子了,楼主的关注点也一直围绕着移动端围绕着Hybrid相关展开,Hybrid已经是大大提升开发效率的开发方式了,但是仍然需要至少一个IOS与Andriod,那么可 ...
- 一个简单移动页面ionic打包成app
先贴JS代码好了,缓动和调整透明度的功能,最后用ionic打包成应用就可以 window.onload=function(){ search(); move(); calc();}function s ...
随机推荐
- 拖拽js
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- python中HTMLParser简单理解
找一个网页,例如https://www.python.org/events/python-events/,用浏览器查看源码并复制,然后尝试解析一下HTML,输出Python官网发布的会议时间.名称和地 ...
- [转载]传智播客_SQL入门
原文地址:传智播客_SQL入门作者:happylonger SQL * 数据定义语言 DDL * 数据操作语言 DML * 查询和更新指令构成了 SQL 的 DML 部分: * SELECT - 从 ...
- Html5 audio stop
//html5 stop audio play function stopPlay(el){ el.pause(); el.currentTime = 0; } 使用: var el = docume ...
- MongoDB自定义函数部分 定义及引用
1. //定义一个Sum的函数 db.system.js.save({_id:"Sum", value:function(key,values) { ; ;i <values ...
- PeopleReady--办公学习类App产品
PeopleReady是能使人(公司或组织里的员工)快速Ready(经验+知识)的学习系统.对员工的好处是:- 可以迅速Ready,尽快符合岗位要求,尽快有Performance,尽快对公司有价值,从 ...
- 关于activiti流程通过、驳回、会签、转办、中止、挂起等核心操作功能的封装
http://blog.csdn.net/aochuanguying/article/details/7594197 package com.famousPro.process.service.imp ...
- Android系统中的dp和px的转换
android系统中DP和SP的转化:1.首先分析TypedValue.java 可以调用以下代码获得dp的值 TypedValue.applyDimension(TypedValue.COMPLEX ...
- $.get
$('#choice').change(function() { if($(this).val() != '') { $.get( 'data.php', { what: $(this).val() ...
- iOS开发——极光推送
1.到极光官网 https://www.jpush.cn/ 下载极光推送SDK. 具体如何集成最好参考官网的文档,以及一些失败的原因.文档非常详细,我也是参考集成的. 2.到极光推送官网注册自己的应用 ...