热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

开发手机APP的神器

前言在如今的生活中,手机已经与我们的生活紧紧的联系在了一起。而手机APP更是其中,重要的一环。今天,影子就为大家介绍一种开发手机APP的超级神器---ionic。ion

  前  言

        

   在如今的生活中,手机已经与我们的生活紧紧的联系在了一起。而手机APP更是其中,重要的一环。今天,影子就为大家介绍一种开发手机APP的超级神器---ionic。

ionic 是一个强大的 HTML5 应用程序开发框架(HTML5 Hybrid Mobile App Framework )。 可以帮助您使用 Web 技术,比如 HTML、CSS 和 Javascript 构建接近原生体验的移动应用程序。

ionic 主要关注外观和体验,以及和你的应用程序的 UI 交互,特别适合用于基于 Hybird 模式的 HTML5 移动应用程序开发。

ionic是一个轻量的手机UI库,具有速度快,界面现代化、美观等特点。为了解决其他一些UI库在手机上运行缓慢的问题,它直接放弃了IOS6和Android4.1以下的版本支持,来获取更好的使用体验。

 

 

1、 ionic 特点

 

  • 1.ionic 基于Angular语法,简单易学。
  • 2.ionic 是一个轻量级框架。
  • 3.ionic 完美的融合下一代移动框架,支持 Angularjs 的特性, MVC ,代码易维护。
  • 4.ionic 提供了漂亮的设计,通过 SASS 构建应用程序,它提供了很多 UI 组件来帮助开发者开发强大的应用。
  • 5.ionic 专注原生,让你看不出混合应用和原生的区别
  • 6.ionic 提供了强大的命令行工具。
  • 7.ionic 性能优越,运行速度快。

 

1、 学习ionic之前需要准备的基础知识

 

  • html5
  • css
  • js
  • Angularjs
3、 ionic中的路由

 

当用户在你的app中浏览时,ionic能够检测到浏览历史。通过检测浏览历史,实现向左或向右滑动时可以正确转换视图。

采用AngularUI路由器模块等应用程序接口可以分为不同的$state(状态)。Angular的核心为路由服务,URLs可以用来控制视图。

AngularUI路由提供了一个更强大的状态管理,即状态可以被命名,嵌套, 以及合并视图,允许一个以上模板呈现在同一个页面。

此外,每个状态无需绑定到一个URL,并且数据可以更灵活地推送到每个状态。

简单点来说,就是一个窗口就是一个$state(状态);

 

 

3.1每个 $state之间的关系

 

3.2实例讲解

  首先,页面的跳转可分为,同文件跳转和外部文件引入;

同文件跳转:

    没一页的代码都写在一个

外部文件引入:

         将不同页面的代码写在一个独立的html文件中;

 

创建 tab按钮,也就是主页

 

 

<script id="templates/tabs.html" type="text/ng-template">
<ion-tabs class="tabs-icon-top tabs-positive">

<ion-tab title="Home" icon="ion-home" href="#/tab/home"> <ion-nav-view name="home-tab"></ion-nav-view>
</ion-tab>

<ion-tab title="About" icon="ion-ios-information" href="#/tab/about">
<ion-nav-view name="about-tab"></ion-nav-view>
</ion-tab>

<ion-tab title="Contact" icon="ion-ios-world" href="#/tab/contact>
<ion-nav-view name="contact-tab"></ion-nav-view>
</ion-tab>

</ion-tabs>
script>

注:

  1、 给标签起一个id名,用于后面的路由配置;格式必须严格:

     ------- id="templates/tabs.html";

     2、将href属性值写为路由格式: "#/tab/标记";

  3、<ion-view > </ion-view>标签用于显示页面内容。相当于AngularJS中的

tab按钮对应页面的构建

 

 <script id="templates/home.html" type="text/ng-template"> 
<ion-view view-title="Home">

</ion-view>
script>

 注:

  同样的,id用于路由配置,、<ion-view > </ion-view>标签用于显示页面内容。

 

路由配置

 

var app = angular.module('myApp', ['ionic']);
app.config(function($stateProvider) {
$stateProvider
.state('index', {
url: '/',
templateUrl: 'home.html'
})
.state('music', {
url: '/music',
templateUrl: 'music.html'
});
});

注:

在module中,必须注入ionic文件,在ionic中,ionic文件时最基础的依赖文件,所有的代码实现,都是建立在此基础之上的;

 

.state参数:

  1、参数1: 路由的名字,表示tabs下的子视图。这个路由定义了,这个路由的视图是在‘home’或index“”这个tab的视图里面绘制的。

  2、url:路由标记读取;如:href="#/tab/home"  ---- 取 /home;

    注意:“/”: 表示主页;

  3、templateUrl:设置,当前页面的绘制代码位置;

注意:

  上面的第一个.state是设置主页;其中templateUrl:设置的是页面刷新时,显示的页面。

  上述三点中的名称必须相互对应,否则会出错;

 

完整代码

 

DOCTYPE html>
<html >
<head>
<meta charset="UTF-8">
<title>sharetitle>
<meta name="viewport" content="initial-scale=1, maximum-scale=1, user-scalable=no, >
<link rel="stylesheet" type="text/css" href="css/ionic.min.css"/>

head>
<body ng-app="app" ng-controller="ctrl">

<ion-nav-bar class="bar-positive">

<ion-nav-back-button>ion-nav-back-button>
ion-nav-bar>


<ion-nav-view >ion-nav-view>



<script id="templates/tabs.html" type="text/ng-template">
<ion-tabs class="tabs-icon-top tabs-positive">

<ion-tab title="Home" icon="ion-home" href="#/tab/home">

<ion-nav-view name="home-tab"></ion-nav-view>
</ion-tab>

<ion-tab title="About" icon="ion-ios-information" href="#/tab/about">
<ion-nav-view name="about-tab"></ion-nav-view>
</ion-tab>

<ion-tab title="Contact" icon="ion-ios-world" href="#/tab/contact>
<ion-nav-view name="contact-tab"></ion-nav-view>
</ion-tab>

</ion-tabs>
script>




<script id="templates/home.html" type="text/ng-template">
<ion-view view-title="Home">
<ion-content class="padding">
<ul>
<li> <a class="button icon icon-right ion-chevron-right" href="#/tab/facts">新闻1</a></li>
<li><a class="button icon icon-right ion-chevron-right" href="#/tab/facts">新闻1</a></li>
<li><a class="button icon icon-right ion-chevron-right" href="#/tab/facts">新闻1</a></li>

</ul>

</ion-content>
</ion-view>
script>


<script id="templates/detail.html" type="text/ng-template">
<ion-view view-title="详情页">
<ion-content class="padding">
<p>这是新闻一</p>

<p>
<a class="button icon ion-home" href="#/tab/home"> Home</a>
</p>
</ion-content>
</ion-view>
script>




<script id="templates/about.html" type="text/ng-template">
<ion-view view-title="About">
<ion-content class="padding">
<h3>about页</h3>
</ion-content>
</ion-view>
script>


<script id="templates/contact.html" type="text/ng-template">
<ion-view title="Contact">
<ion-content class="padding">
<h3>联系电话:110</h3>


</ion-content>

</ion-view>
script>




body>
<script src="js/ionic.bundle.min.js" type="text/Javascript" charset="utf-8">script>
<script type="text/Javascript">
angular.module("app",["ionic"])
.config(function($stateProvider, $urlRouterProvider) {
/*
$stateProvider:进行路由配置:处理路由状态的服务,路由的状态反映了该项在应用程序中的位置
* $urlRouterProvider :当你访问链接的时候没有携带任何的路由信息,那系统会自动访问otherwise配置的路由
*
* */
$stateProvider
.state('tabs', { //主页
url: "/tab",
abstract: true,
templateUrl: "templates/tabs.html" //定义主页路径
})
.state('tabs.home', { //路由的名字,表示tabs下的子视图。这个路由定义了,这个路由的视图是在‘tabs.home’这个tab的视图里面绘制的。
url: "/home", //href标记读取
views: {
'home-tab': { //子视图的名字,必须与(导航栏) name 相同
templateUrl: "templates/home.html", // id名,也是要显示的页面路径
//controller: 'ctrl' //可有可无
}
}
})
.state('tabs.detail', {
url: "/facts",
views: {
'home-tab': {
templateUrl: "templates/detail.html"
}
}
})
.state('tabs.about', {
url: "/about",
views: {
'about-tab': {
templateUrl: "templates/about.html"
}
}
})
.state('tabs.contact', {
url: "/contact",
views: {
'contact-tab': {
// templateUrl: "contact.html" //跳转
templateUrl: "templates/contact.html" //同文档跳转,同时存在会覆盖上面的
}
}
});


$urlRouterProvider.otherwise("/tab/home"); //例如:将about的路由.state屏蔽,在about也刷新,将显示home页

})
.controller("ctrl",function($scope){
//alert("home");
})

script>
html>

 

效果图

 

 

4 ionic中的数据请求

ionic中的数据请求与AngularJS中的$http 相似;在这里,影子就以下拉刷新为例,给大家分享下,ionic的数据请求方式;

HTML代码

 

 <ion-content class="has-header">

<ion-refresher pulling-text="下拉刷新" on-refresh="doRefresh()">

ion-refresher>

<ion-list>
<ion-item ng-repeat="item in items" ng-bind="item.name">
ion-item>
ion-list>



ion-content>

注:

1、pulling-text属性:下拉时,在下拉区域显示的提示文字;

2、on-refresh事件:在页面下拉时自动触发的事件;在这个时候,我们可进行对数据的请求和操作;

 

JS代码

 

 $scope.items=[
{
"name":"HTML5",
},
{
"name":"Javascript",
},
{
"name":"Css3",
}
];

$scope.doRefresh = function() {
$http.get('h51701.json') //注意改为自己本站的地址,不然会有跨域问题
.success(function(data) {
$scope.items = data;//各种使用规则同 Angular JS
})
.finally(function() {
$scope.$broadcast('scroll.refreshComplete');//下拉后复位
});
};

注:

  这里,影子用自己编写的json文件代替服务器数据;

1、使用$http();请求h51701.json文件中的数据。并将数据进行打印。

2、$scope.items数组,表示的是页面刷新前的数据。

3、  $scope.items = data;

     ---  刷新时,将请求得到的数据,赋给$scope.items数组,再利用ionic数据双向绑定的特性,将数据实时打印出来。

4、 $scope.$broadcast('scroll.refreshComplete');

      ----    页面刷新完成以后,将页面复位。

 

完整代码

 

DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>下拉刷新title>
<link rel="stylesheet" type="text/css" href="css/ionic.min.css"/>
head>
<body ng-app="starter" ng-controller="actionsheetCtl" >
<div class="bar bar-header bar-positive">
<h1 class="title">下拉刷新h1>
div>
<ion-content class="has-header">

<ion-refresher pulling-text="下拉刷新" on-refresh="doRefresh()">

ion-refresher>

<ion-list>
<ion-item ng-repeat="item in items" ng-bind="item.name+item.ageitem.hobby">
ion-item>
ion-list>



ion-content>
body>
<script src="js/ionic.bundle.min.js" type="text/Javascript" charset="utf-8">script>
<script type="text/Javascript">
angular.module('starter', ['ionic'])
.controller( 'actionsheetCtl',function($scope,$timeout,$http){
//默认显示内容
$scope.items=[
{
"name":"HTML5",
},
{
"name":"Javascript",
},
{
"name":"Css3",
}
];

$scope.doRefresh = function() {
$http.get('h51701.json') //注意改为自己本站的地址,不然会有跨域问题
.success(function(data) {
$scope.items = data;//各种使用规则同 Angular JS
})
.finally(function() {
$scope.$broadcast('scroll.refreshComplete');//下拉后复位
});
};
})

script>
html>

 

效果图

好了,今天影子要分享的内容就到这里结束了;希望大家能够喜欢,也希望大家多多支持影子!!!!!


推荐阅读
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • baresip android编译、运行教程1语音通话
    本文介绍了如何在安卓平台上编译和运行baresip android,包括下载相关的sdk和ndk,修改ndk路径和输出目录,以及创建一个c++的安卓工程并将目录考到cpp下。详细步骤可参考给出的链接和文档。 ... [详细]
  • Android Studio Bumblebee | 2021.1.1(大黄蜂版本使用介绍)
    本文介绍了Android Studio Bumblebee | 2021.1.1(大黄蜂版本)的使用方法和相关知识,包括Gradle的介绍、设备管理器的配置、无线调试、新版本问题等内容。同时还提供了更新版本的下载地址和启动页面截图。 ... [详细]
  • 后台获取视图对应的字符串
    1.帮助类后台获取视图对应的字符串publicclassViewHelper{将View输出为字符串(注:不会执行对应的ac ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • 拥抱Android Design Support Library新变化(导航视图、悬浮ActionBar)
    转载请注明明桑AndroidAndroid5.0Loollipop作为Android最重要的版本之一,为我们带来了全新的界面风格和设计语言。看起来很受欢迎࿰ ... [详细]
  • Go GUIlxn/walk 学习3.菜单栏和工具栏的具体实现
    本文介绍了使用Go语言的GUI库lxn/walk实现菜单栏和工具栏的具体方法,包括消息窗口的产生、文件放置动作响应和提示框的应用。部分代码来自上一篇博客和lxn/walk官方示例。文章提供了学习GUI开发的实际案例和代码示例。 ... [详细]
  • 本文介绍了如何使用C#制作Java+Mysql+Tomcat环境安装程序,实现一键式安装。通过将JDK、Mysql、Tomcat三者制作成一个安装包,解决了客户在安装软件时的复杂配置和繁琐问题,便于管理软件版本和系统集成。具体步骤包括配置JDK环境变量和安装Mysql服务,其中使用了MySQL Server 5.5社区版和my.ini文件。安装方法为通过命令行将目录转到mysql的bin目录下,执行mysqld --install MySQL5命令。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 在重复造轮子的情况下用ProxyServlet反向代理来减少工作量
    像不少公司内部不同团队都会自己研发自己工具产品,当各个产品逐渐成熟,到达了一定的发展瓶颈,同时每个产品都有着自己的入口,用户 ... [详细]
author-avatar
waiwaiwai
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有