Ionic学习总结

来源:互联网 发布:php 字母a加1 编辑:程序博客网 时间:2024/06/04 01:04

一、Ionic概念
ionic 主要关注外观和体验,以及和你的应用程序的 UI 交互,特别适合用于基于 Hybird 模式的 HTML5 移动应用程序开发。
Hybird:混合模式移动应用。
Ionic主要分为Ionic CSS 和Ionic JavaScript,

二、Ionic安装
可查看右边的网址安装:http://www.runoob.com/ionic/ionic-install.html

三、IonicCSS

常用标签

  • ion-side-menus 侧栏菜单组
  • ion-side-menu-content 侧栏菜单内容
  • ion-nav-view 导航视图
  • ion-side-menu 侧栏菜单
  • ion-footer-bar 底部
  • ion-header-bar 头部
  • ion-content 文本
  • ion-view 视图
  • ion-option-button select选项
  • ion-tabs tab组合
  • ion-tab tab栏
  • ion-delete-button 删除按钮
  • ion-reorder-button 记录按钮
  • ion-list 列表
  • ion-item 列表项
  • button 按钮
  • ion-pane 面板
  • ion-spinner 加载动画
  • ion-toggle 开关切换
  • ion-slide-box 侧边框
  • ion-checkbox 复选框
  • ion-radio 单选框
  • ion-refresher 刷新
  • ion-side-menus :是一个带有边栏菜单的容器,可以通过点击按钮或者滑动屏幕来展开菜单。
    • 属性enable-menu-with-back-views,布尔值,在返回按钮显示时,确认是否启用侧边栏菜单。
    • 属性delegate-handle,字符串,该句柄用于标识带有$ionicScrollDelegate的滚动视图。
  • ion-side-menu-content:展示主要内容的容器,可以通过滑动屏幕来展开menu。
    • 属性drag-content,布尔值,内容是否可被拖动,默认为true。
  • ion-nav-view:导航。
  • ion-side-menu:存放侧边栏的容器。
    • 侧栏菜单的容器,同级的一个ion-side-menu-content 指令。
    • 属性side,字符串,侧栏菜单当前在哪一边。可选的值有: ‘left’ 或 ‘right’。
    • 属性is-enabled,布尔值,该侧栏菜单是否可用。
    • 属性width,数值,侧栏菜单应该有多少像素的宽度。默认为275。
    • 通用属性menu-toggle,在一个指定的侧栏中切换菜单。
    • 通用属性menu-close,关闭当前打开的侧栏菜单。
  • ion-footer-bar:屏幕的底部。
  • ion-header-bar:菜单栏头部。
    • bar-light 样式 白色
    • bar-stable 白框
    • bar-positive 蓝色
    • bar-calm 淡蓝色
    • bar-balanced 绿色
    • bar-energized 黄色
    • bar-assertive 红色
    • bar-royal 淡紫色
    • bar-dark 黑色
    • bar-subheader 副标题
    • bar-footer 底部
    • pull-right 居右
    • 属性 align-title=”left/right/center”,对齐title
    • 属性 no-tap-scroll,默认情况下,头部标题栏在点击屏幕时内容会滚动到头部,可以将 no-tap-scroll 设置为 true 来禁止该动作。它的值是布尔值(true/false)。
      示例:
<div class="bar bar-footer bar-calm">  <button class="button button-clear pull-right">Left</button>  <div class="title">Title</div>  <button class="button button-clear">Right</button></div>
  • ion-content:内容。

  • ion-view 视图,属于ionNavView。 一个内容的容器,用于展示视图或导航栏信息。

    • 通过cache-view=”false” 属性禁用缓存。
  • ion-option-button

  • ion-tabs 是有一组页面选项卡组成的选项卡栏。可以通过点击选项来切换页面。
    • 属性delegate-handle,字符串,该句柄用$ionicTabsDelegate来标识这些选项卡。
  • ion-tab 隶属于ionTabs,包含一个选项卡内容。该内容仅存在于被选中的给定选项卡中。
    • 样式tabs-icon-top tabs-positive
      示例:
<ion-tab  title="Tab!" //字符串,该选项卡的标题。  icon="my-icon"  //字符串,选项卡的图标。如果给定值,它将成为ion-on和ion-off的默认值。  ion-on="" //字符串,被选中标签的图标。  ion-off=""  //字符串,没被选中标签的图标。  badge=""  //表达式,选项卡上的徽章(通常是一个数字)。  ng-click=""  //表达式,通常,点击时选项卡会被选中。如果设置了 ng-Click,它将不会被选中。 你可以用$ionicTabsDelegate.select()来指定切换标签。  badge-style=""  //表达式,选项卡上微章的样式(例,tabs-positive )。  href="#/tab/tab-link" //字符串,但触碰的时候,该选项卡将会跳转的的链接。  on-select="onTabSelected()" //表达式,选项卡被选中时触发。  on-deselect="onTabDeselected()">//表达式,选项卡取消选中时触发。</ion-tab>
  • ion-delete-button
  • ion-reorder-button
  • ion-list:列表。
    • 样式
    • list list-insert,内嵌列表,列表不会显示完整的宽度。
    • item,标签。
    • item-input,文本框,input-label。
    • item-select,
    • item-stacked-label,堆叠标签
    • item-floating-label,浮动标签
    • item-input-inset,内嵌输入域
    • item-toggle,切换开关,类似 HTML 的 checkbox 标签,但它更易于在移动设备上使用。
    • item-checkbox,复选框。
    • item-radio,单选框。
    • item range range-calm,滑块,左右两边一个图标,用标签<i></i> 表示
    • 属性 show-delete,列表项的删除按钮当前是显示还是隐藏。
    • 属性 delegate-handle="字符串" 该句柄定义带有$ionicListDelegate的列表。
    • 属性 show-reorder,列表项的排序按钮当前是显示还是隐藏。
    • 属性 can-swipe,列表项是否被允许滑动显示选项按钮。默认:true。
      示例:
<html ng-app="ionicApp">    <head>        <meta charset="utf-8">        <meta name="viewport" content="initial-scale=1, maximum-scale=1, user-scalable=no, width=device-width">        <title>菜鸟教程(runoob.com)</title>        <link href="https://cdn.bootcss.com/ionic/1.3.2/css/ionic.css" rel="stylesheet">        <script src="https://cdn.bootcss.com/ionic/1.3.2/js/ionic.bundle.min.js"></script>    </head>    <body>    <div class="bar bar-header item-input-inset">      <label class="item-input-wrapper">        <i class="icon ion-ios-search placeholder-icon"></i>        <input type="search" placeholder="搜索">      </label>      <button class="button button-clear">        取消      </button>    </div>  </body>//滑块示例          <div class="item range range-positive">            <i class="icon ion-ios-sunny-outline"></i>            <input type="range" name="volume" min="0" max="100" value="12">            <i class="icon ion-ios-sunny"></i>          </div>//select选择框          <div class="item item-input item-select">            <div class="input-label">              Lightsaber            </div>            <select>              <option>Blue</option>              <option selected="">Green</option>              <option>Red</option>            </select>          </div>
  • ion-item:列表项

    • 样式
    • item-divider,分隔符
    • item-icon-left , 设置图标在左侧, item-icon-right,设置图标在右侧。如果你需要在两边都有图标,则两个类都添加上即可。
    • item-button-right, item-button-left 按钮列表
    • item-avatar,带圆形头像列表
    • item-thumbnail-left,带方形缩略图列表
    • item

    示例:

<ion-side-menus><!-- 中心内容 --><ion-side-menu-content>  <ion-header-bar class="bar-dark">    <button class="button button-icon" ng-click="toggleProjects()">      <i class="icon ion-navicon"></i>    </button>    <h1 class="title">{{activeProject.title}}</h1>    <!-- 新增按钮 -->    <button class="button button-icon" ng-click="newTask()">      <i class="icon ion-compose"></i>    </button>  </ion-header-bar>  <ion-content scroll="false">    <ion-list>      <ion-item ng-repeat="task in activeProject.tasks">        {{task.title}}      </ion-item>    </ion-list>  </ion-content></ion-side-menu-content><!-- 左边栏 --><ion-side-menu side="left"><ion-header-bar class="bar-dark">  <h1 class="title">Projects</h1>  <button class="button button-icon ion-plus" ng-click="newProject()">  </button></ion-header-bar><ion-content scroll="false">  <ion-list>    <ion-item ng-repeat="project in projects" ng-click="selectProject(project, $index)" ng-class="{active: activeProject == project}">      {{project.title}}    </ion-item>  </ion-list></ion-content></ion-side-menu></ion-side-menus>//样式示例<div class="list">    <a class="item item-thumbnail-left" href="#">      <img src="cover.jpg">      <h2>Pretty Hate Machine</h2>      <p>Nine Inch Nails</p>    </a>    ...</div>
  • button 按钮
    • 按钮默认显示样式:display:inline-block
    • 显示样式:display: block,完全填充父元素的宽度,包含了内边距属性padding。
    • 颜色同bar,button-light,button-stable,button-positive,button-calm,button-balanced,button-energized,button-assertive,button-royal,button-dark
    • button-full,让按钮显示完全宽度,且不包含内边距padding。
    • button-large ,button-small ,设置按钮大小
    • button-outline,设置背景透明
    • button-clear,无背景与边框按钮
    • 按钮图标,icon, icon-left, icon-right, ion-home, ion-star, ion-chevron-right, ion-chevron-left, ion-gear-a, ion-navicon
      示例:
<div class="bar bar-header">  <button class="button button-icon icon ion-navicon"></button>  <div class="h1 title">Header Buttons</div>  <button class="button button-clear button-positive">Edit</button></div>
  • ionic tab 选项卡(没有标签,仅为样式显示)
    • tabs tabs-icon-only/tabs-icon-left
    • tab-item
      示例:
<div class="tabs tabs-icon-left">  <a class="tab-item">    <i class="icon ion-home"></i>    主页  </a>  <a class="tab-item">    <i class="icon ion-star"></i>    收藏  </a>  <a class="tab-item">    <i class="icon ion-gear-a"></i>    设置  </a></div>
  • ionic Grid 网格,采用了弹性盒子模型(Flexible Box Model)(没有标签,仅为样式显示) 。

    • 样式
    • row
    • col
    • col-50 指定列宽 50%,col-20 指定列宽 20%
    • col-offset-33 ,左偏移
    • col-top,col-center,col-bottom,列纵向对齐网络
    • row-top,row-center,row-bottom,行纵向对齐网络
    • row responsive-sm/responsive-md/responsive-lg,sm:小于手机横屏,md:小于平板竖屏,lg:小于平板横屏
  • ion-pane ,面板

  • ion-spinner ,提供了许多种旋转加载的动画图标。当你的界面加载时,你就可以呈现给用户相应的加载图标。该图标采用的是SVG。
    示例:
    <ion-spinner class="spinner-energized"></ion-spinner>
    <ion-spinner icon="dots" class="spinner-dark"></ion-spinner>

  • ion-toggle 切换开关操作

  • ion-slide-box 滑动框是一个包含多页容器的组件,每页滑动或拖动切换。
    • 属性delegate-handle,字符串,该句柄用$ionicSlideBoxDelegate来标识这个滑动框。
    • 属性does-continue,布尔值,滑动框是否开启循环滚动。
    • 属性auto-play,布尔值,设置滑动框是否循环播放,如果 does-continue 为 true,默认也为 true。
    • 属性slide-interval,数字,等待多少毫秒开始滑动(如果继续则为true)。默认为4000。
    • 属性show-pager,布尔值,滑动框的页面是否显示。
    • 属性pager-click,表达式,当点击页面时,触发该表达式(如果shou-pager为true)。传递一个’索引’变量。
    • 属性on-slide-changed,表达式,当滑动时,触发该表达式。传递一个’索引’变量。
    • 属性active-slide,表达式,将模型绑定到当前滑动框。
  • ion-checkbox 复选框
  • ion-radio 单选框
    示例:
//复选框<ion-checkbox ng-model="isChecked">复选框标签</ion-checkbox>//单选框<ion-radio ng-repeat="item in clientSideList"               ng-value="item.value"               ng-model="data.clientSide">      {{ item.text }}    </ion-radio>
  • ion-refresher
    示例:
 <ion-refresher pulling-text="下拉刷新" on-refresh="doRefresh()"></ion-refresher>
  • ionic icon 图标(没有标签,仅为样式显示)
    • 样式
    • icon ion-star
    • Ionic icons 官网: http://ionicons.com/
    • 国内图标样式 CDN 地址:https://cdn.bootcss.com/ionicons/2.0.1/css/ionicons.min.css。
      示例:
<i class="icon ion-star"></i><i class = "icon ion-happy-outline"></i><i class = "icon ion-ios-analytics"></i><i class = "icon ion-ios-eye"></i>
  • card 卡片
    • box-shadow,阴影。
      示例:
<div class="list card">  <div class="item item-avatar">    <img src="mcfly.jpg">    <h2>Marty McFly</h2>    <p>November 05, 1955</p>  </div>  <div class="item item-body">    <img class="full-image" src="delorean.jpg">    <p>      菜鸟教程 -- 学的不仅是技术,更是梦想!<br>      菜鸟教程 -- 学的不仅是技术,更是梦想!<br>      菜鸟教程 -- 学的不仅是技术,更是梦想!<br>      菜鸟教程 -- 学的不仅是技术,更是梦想!    </p>    <p>      <a href="#" class="subdued">1 喜欢</a>      <a href="#" class="subdued">5 评论</a>    </p>  </div>  <div class="item tabs tabs-secondary tabs-icon-left">    <a class="tab-item" href="#">      <i class="icon ion-thumbsup"></i>      喜欢    </a>    <a class="tab-item" href="#">      <i class="icon ion-chatbox"></i>      评论    </a>    <a class="tab-item" href="#">      <i class="icon ion-share"></i>      分享    </a>  </div></div>

四、Ionic 常用AngularJS服务

  • $ionicModal可以遮住用户主界面的内容框
  • $ionicSideMenuDelegate,控制所有侧栏菜单
  • $ionicPlatform
  • $stateParams
  • $ionicActionSheet
  • $ionicTabsDelegate 授权控制ionTabs指令。用$getByHandle方法控制具体的ionTabs实例。
  • $urlRouterProvider url路由
  • $stateProvider 设置导航的状态
  • $ionicConfigProvider
  • $ionicLoading 加载交互效果
  • $ionicActionSheet 上拉菜单
  • $ionicBackdrop 背景层
  • $ionicGesture手势事件
  • $ionicModal 模态窗口
  • $ionicSideMenuDelegate,触发$ionicSideMenuDelegate服务,来控制所有侧栏菜单。用$getByHandle方法控制特定情况下的ionSideMenus。
    • $ionicSideMenuDelegate.toggleLeft([isOpen]);isOpen:布尔值,是否打开或关闭菜单。默认:切换菜单。
    • $ionicSideMenuDelegate.toggleRight([isOpen]);isOpen:布尔值,是否打开或关闭菜单。默认:切换菜单。
    • $ionicSideMenuDelegate.getOpenRatio();获取打开菜单内容超出菜单宽度的比例。
    • $ionicSideMenuDelegate.isOpen();判断左侧或右侧菜单是否已经打开。
    • $ionicSideMenuDelegate.isOpenLeft();判断左侧菜单是否已经打开。
    • $ionicSideMenuDelegate.isOpenRight();判断右侧菜单是否已经打开。
      $ionicSideMenuDelegate.canDragContent([canDrag]);canDrag:布尔值,设置是否可以拖动内容打开侧栏菜单。
    • $ionicSideMenuDelegate.$getByHandle(handle);handle:字符串。
      示例:$ionicSideMenuDelegate.$getByHandle('my-handle').toggleLeft();
  • $ionicPlatform 服务
  • $stateParams
  • $ionicActionSheet 服务
  • $ionicTabsDelegate 授权控制ionTabs指令。用$getByHandle方法控制具体的ionTabs实例。
    • $ionicTabsDelegate.select(index, [shouldChangeHistory]); index:数值,选择标签的索引;shouldChangeHistory:布尔值,此选项是否应该加载这个标签的浏览历史(如果存在),并使用,或仅加载默认页面。默认为false。提示:如果一个ion-nav-view在选项卡里,你可能需要设置它为true。
    • $ionicTabsDelegate.selectedIndex();数值,被选中标签的索引,如-1.
    • $ionicTabsDelegate.$getByHandle(handle); handle:字符串。$ionicTabsDelegate.$getByHandle('my-handle').select(0);
  • $urlRouterProvider url路由
    示例:$urlRouterProvider.otherwise('/app/playlists');
  • $stateProvider 设置导航的状态
    示例:
var app = angular.module('myApp', ['ionic']);app.config(function($stateProvider) {  $stateProvider  .state('index', {    url: '/',    templateUrl: 'home.html'  })  .state('music', {    url: '/music',    templateUrl: 'music.html'  });});
  • $ionicConfigProvider
  • $ionicBackdrop 背景层
    • $ionicBackdrop.retain(),显示背景层。
    • $ionicBackdrop.release(),隐藏背景层。
  • $ionicGesture angular服务, 展示ionicionic.EventController手势。

    • on(eventType, callback, $element)
      在一个元素上添加一个事件监听器。
      eventType:string类型,监听的手势事件;
      callback:function(e)类型,当手势事件发生时触发的事件。
      $element:element类型,angular元素监听的事件。
    • off(eventType, callback, $element)
      参数含义同on(eventType, callback, $element)
  • $ionicActionSheet, 上拉菜单
    示例:

angular.module('starter', ['ionic']).run(function($ionicPlatform) {  $ionicPlatform.ready(function() {    // Hide the accessory bar by default (remove this to show the accessory bar above the keyboard    // for form inputs)    if(window.cordova && window.cordova.plugins.Keyboard) {      cordova.plugins.Keyboard.hideKeyboardAccessoryBar(true);    }    if(window.StatusBar) {      StatusBar.styleDefault();    }  });}).controller( 'actionsheetCtl',['$scope','$ionicActionSheet','$timeout' ,function($scope,$ionicActionSheet,$timeout){    $scope.show = function() {        var hideSheet = $ionicActionSheet.show({            buttons: [              { text: '<b>Share</b> This' },              { text: 'Move' }            ],            destructiveText: 'Delete',            titleText: 'Modify your album',            cancelText: 'Cancel',            cancel: function() {                 // add cancel code..               },            buttonClicked: function(index) {              return true;            }        });        $timeout(function() {            hideSheet();        }, 2000);    };  }])
  • 背景层($ionicBackdrop

    • $ionicBackdrop.retain(),显示背景层。
    • $ionicBackdrop.release(),隐藏背景层。
  • 手势事件($ionicGesture)

    • on-hold 长按的时间是500毫秒。示例:<button on-hold="onHold()" class="button" >Test <button>
    • on-tab 手势轻击事件.
    • on-double-tap 手双击屏幕事件
    • on-touch 这个和 on-tap 还是有区别的,这个是立即执行,而且是用户点击立马执行。
    • on-release 当用户结束触摸事件时触发。
    • on-drag 这个有点类似于PC端的拖拽。当你一直点击某个物体,并且手开始移动,都会触发 on-drag。
    • on-drag-up 向上拖拽, on-drag-right , on-drag-down, on-drag-left,
    • on-swipe 手指滑动效果,可以是任何方向上的。而且也和 on-drag 类似,都有四个方向上单独的事件。
    • on-swipe-up 向上的手指滑动效果。on-swipe-right, on-swipe-down, on-swipe-left
  • $ionicLoading 加载交互效果。
    - 显示一个加载效果,show(opts); $ionicLoading.show();
    - 隐藏一个加载效果,hide(); $ionicLoading.hide();
    - $ionicLoadingConfig ,设置加载的默认项

<html ng-app="ionicApp">  <head>    <meta charset="utf-8">    <meta name="viewport" content="initial-scale=1, maximum-scale=1, user-scalable=no, width=device-width">     <title>菜鸟教程(runoob.com)</title>    <link href="https://cdn.bootcss.com/ionic/1.3.2/css/ionic.css" rel="stylesheet">    <script src="https://cdn.bootcss.com/ionic/1.3.2/js/ionic.bundle.min.js"></script>    <script>    var app = angular.module('ionicApp', ['ionic'])    app.constant('$ionicLoadingConfig',{template:'默认加载模版......'});    app.controller('AppCtrl', function($scope, $timeout, $ionicLoading) {      // Setup the loader      $ionicLoading.show({        content: 'Loading',        animation: 'fade-in',        showBackdrop: true,        maxWidth: 200,        showDelay: 0,        template:"",指示器的html内容。        templateUrl:"",//一个加载html模板的url作为指示器的内容。        noBackdrop:false;//是否隐藏背景。默认情况下它会显示。        delay:2000,//指示器延迟多少毫秒显示。默认为不延迟。        duration:3000 //等待多少毫秒后自动隐藏指示器。默认情况下,指示器会一直显示,直到触发.hide()。      });      //或者$ionicLoading.show();配置项在$ionicLoadingConfig设置      // Set a timeout to clear loader, however you would actually call the $ionicLoading.hide(); method whenever everything is ready or loaded.      $timeout(function () {        $ionicLoading.hide();        $scope.stooges = [{name: 'Moe'}, {name: 'Larry'}, {name: 'Curly'}];      }, 2000);    });    </script>  </head>  <body ng-controller="AppCtrl">      <ion-view title="Home">        <ion-header-bar>          <h1 class="title">The Stooges</h1>        </ion-header-bar>        <ion-content has-header="true">          <ion-list>            <ion-item ng-repeat="stooge in stooges" href="#">{{stooge.name}}</ion-item>          </ion-list>        </ion-content>      </ion-view>  </body></html>
  • $ionicModal 模态窗口。
    示例:
<html ng-app="ionicApp">  <head>    <meta charset="utf-8">    <meta name="viewport" content="initial-scale=1, maximum-scale=1, user-scalable=no, width=device-width">     <title>菜鸟教程(runoob.com)</title>    <link href="https://cdn.bootcss.com/ionic/1.3.2/css/ionic.css" rel="stylesheet">    <script src="https://cdn.bootcss.com/ionic/1.3.2/js/ionic.bundle.min.js"></script>    <style>    body {        cursor: url('http://ionicframework.com/img/finger.png'), auto;    }    </style>    <script>    var app=angular.module('ionicApp', ['ionic'])    app.controller('AppCtrl', function($scope, $ionicModal) {      $scope.contacts = [        { name: 'Gordon Freeman' },        { name: 'Barney Calhoun' },        { name: 'Lamarr the Headcrab' },      ];      /*fromTemplate(templateString, options);      fromTemplateUrl(templateUrl, options);      templateString:"",模板的字符串作为模态窗口的内容。      templateUrl:载入模板的url。      options:options 会传递到 ionicModal#initialize方法中。      */      /*initialize(options),创建一个新的模态窗口控制器示例。        options:{object=} 范围 子类的范围。默认:创建一个$rootScope子类。                 {string=} 动画 带有显示或隐藏的动画。默认:'slide-in-up'                 {boolean=} 第一个输入框获取焦点 当显示时,模态窗口的第一个输入元素是否自动获取焦点。默认:false。                 {boolean=}backdropClickToClose` 点击背景时是否关闭模态窗口。默认:true。      */      $ionicModal.fromTemplateUrl('templates/modal.html', {        scope: $scope      }).then(function(modal) {        $scope.modal = modal;      });      $scope.createContact = function(u) {                $scope.contacts.push({ name: u.firstName + ' ' + u.lastName });        $scope.modal.hide();        //$scope.modal.remove();        //$scope.modal.isShown();      };    });    </script>  </head>  <body ng-controller="AppCtrl">    <ion-header-bar class="bar-positive">      <h1 class="title">Contacts</h1>      <div class="buttons">        <button class="button button-icon ion-compose" ng-click="modal.show()">        </button>      </div>    </ion-header-bar>    <ion-content>      <ion-list>        <ion-item ng-repeat="contact in contacts">          {{contact.name}}        </ion-item>      </ion-list>    </ion-content>    <script id="templates/modal.html" type="text/ng-template">      <ion-modal-view>        <ion-header-bar class="bar bar-header bar-positive">          <h1 class="title">New Contact</h1>          <button class="button button-clear button-primary" ng-click="modal.hide()">Cancel</button>        </ion-header-bar>        <ion-content class="padding">          <div class="list">            <label class="item item-input">              <span class="input-label">First Name</span>              <input ng-model="newUser.firstName" type="text">            </label>            <label class="item item-input">              <span class="input-label">Last Name</span>              <input ng-model="newUser.lastName" type="text">            </label>            <label class="item item-input">              <span class="input-label">Email</span>              <input ng-model="newUser.email" type="text">            </label>            <button class="button button-full button-positive" ng-click="createContact(newUser)">Create</button>          </div>        </ion-content>      </ion-modal-view>    </script>  </body></html>