稍复杂的ionic例子:显示一个列表,并且允许点击进入列表项

这个例子,按照MVC的方式进行了分层,下面是代码:

demo3.htm

<!DOCTYPE html>
<html ng-app="app">
<head>
    <meta charset="utf-8">
    <title>angular-demo3</title>
    <link href="lib/ionic/css/ionic.css" rel="stylesheet">
    <script type="text/javascript" src="../lib/ionic/js/ionic.bundle.js" charset="utf-8"></script>
    <script type="text/javascript" src="js/demo3_app.js"></script>
    <script type="text/javascript" src="js/demo3_controllers.js"></script>
    <script type="text/javascript" src="js/demo3_services.js"></script>
</head>
<body>
    <ion-nav-bar class="bar-stable">
      <ion-nav-back-button>
      </ion-nav-back-button>
    </ion-nav-bar>
    <ion-nav-view></ion-nav-view>
</body>
</html>

demo3_app.js

var app = angular.module(‘app‘,[‘ionic‘,‘demo3.controllers‘,‘demo3.services‘]);

app.config(function($stateProvider, $urlRouterProvider) {
      $stateProvider
      .state(‘chats‘, {
          url: ‘/chats‘,
          templateUrl: ‘templates/chats.html‘,
          controller: ‘ChatsCtrl‘
        })
      .state(‘chat-detail‘, {
          url: ‘/chats/:chatId‘,
          templateUrl: ‘templates/chat-detail.html‘,
          controller: ‘ChatDetailCtrl‘
        });

      $urlRouterProvider.otherwise(‘/chats‘);
});

demo3_controllers.js

angular.module(‘demo3.controllers‘,[])
.controller(‘ChatsCtrl‘, function($scope, Chats) {
  $scope.chats = Chats.all();
  $scope.remove = function(chat) {
    Chats.remove(chat);
  }
})

.controller(‘ChatDetailCtrl‘, function($scope, $stateParams, Chats) {
  $scope.chat = Chats.get($stateParams.chatId);
});

demo3_services.js

angular.module(‘demo3.services‘,[]).factory(‘Chats‘,function(){
    var chats = [{
        id: 0,
        name: ‘Ben Sparrow‘,
        lastText: ‘You on your way?‘,
        face: ‘https://ss1.baidu.com/9vo3dSag_xI4khGko9WTAnF6hhy/dpp/pic/item/cc11728b4710b912d53c66bdc5fdfc03934522f7.jpg‘
      }, {
        id: 1,
        name: ‘Max Lynx‘,
        lastText: ‘Hey, it\‘s me‘,
        face: ‘https://ss1.baidu.com/9vo3dSag_xI4khGko9WTAnF6hhy/dpp/pic/item/5243fbf2b21193130a116ff363380cd791238d27.jpg‘
      },{
        id: 2,
        name: ‘Adam Bradleyson‘,
        lastText: ‘I should buy a boat‘,
        face: ‘https://ss2.baidu.com/-vo3dSag_xI4khGko9WTAnF6hhy/dpp/pic/item/95eef01f3a292df514390469ba315c6035a873d0.jpg‘
      }, {
        id: 3,
        name: ‘Perry Governor‘,
        lastText: ‘Look at my mukluks!‘,
        face: ‘https://ss0.baidu.com/94o3dSag_xI4khGko9WTAnF6hhy/dpp/pic/item/500fd9f9d72a6059884e49662e34349b033bba74.jpg‘
      }, {
        id: 4,
        name: ‘Mike Harrington‘,
        lastText: ‘This is wicked good ice cream.‘,
        face: ‘https://ss2.baidu.com/-vo3dSag_xI4khGko9WTAnF6hhy/dpp/pic/item/9e3df8dcd100baa1efd9eec74110b912c9fc2ed0.jpg‘
      }];

    return {
        all:function() {
            return chats;
        },
        remove:function(chat) {
            chats.splice(chats.indexOf(chat), 1);
        },
        get: function(chatId) {
            for (var i = 0; i < chats.length; i++) {
              if (chats[i].id === parseInt(chatId)) {
                return chats[i];
              }
            }
            return null;
        }
    };
});

chats.html

<ion-view view-title="Chats">
  <ion-content>
    <ion-list>
      <ion-item class="item-remove-animate item-avatar item-icon-right" ng-repeat="chat in chats" type="item-text-wrap" href="#/chats/{{chat.id}}">
        <img ng-src="{{chat.face}}">
        <h2>{{chat.name}}</h2>
        <p>{{chat.lastText}}</p>
        <i class="icon ion-chevron-right icon-accessory"></i>

        <ion-option-button class="button-assertive" ng-click="remove(chat)">
          Delete
        </ion-option-button>
      </ion-item>
    </ion-list>
  </ion-content>
</ion-view>

chat-detail.html

<ion-view view-title="{{chat.name}}">
  <ion-content class="padding">
    <img ng-src="{{chat.face}}" style="width: 64px; height: 64px">
    <p>
      {{chat.lastText}}
    </p>
  </ion-content>
</ion-view>

有几个地方简单分析一下:

1、页面路由在设置chat-detail页面时,使用了变量:chatId,那么在controller定义的时候通过$stateParams.chatId可以得到该变量

2、注意demo3_services.js页面中使用factory定义服务的方式,在controller中使用Chats使用该服务

3、注意demo3_app.js页面中引用demo3_controllers.js和demo3_services.js,使用MVC的方式

时间: 2024-11-07 21:39:48

稍复杂的ionic例子:显示一个列表,并且允许点击进入列表项的相关文章

在列表中,点击不同列表项,改变为当前选中样式

一:html 代码部份 <div class="c_left_menu" id="oList"> <ul> <li> 售 </li> <li> 租 </li> <li> 跟 </li> <li> 售 </li> </ul> </div> 二:CSS代码 #onClicked{ color:red; font-size:24p

如何点击隐藏和显示一个div

如何点击隐藏和显示一个div: 在很多时候有这样的需求,那就是点击显示一个div,再点击就会隐藏显示的div.例如在网站后台添加文章的时候,有时候会根据用户的需要选择是否添加额外的信息.下面就简单介绍一下如何实现此种效果. 实现点击隐藏和显示div的方法有多种,下面就介绍一下比较常用的一种: 使用toggle()方法实现div的隐藏隐藏和显示,代码实例如下: <!DOCTYPE html> <html> <head> <meta charset=" ut

用Dialog显示一个列表

要求:用Dialog对话框显示一个列表,并实现其点击效果 代码: private ListView lv_list; private String deleteName; private AlertDialog.Builder builder; private Dialog dialog; private void showDialog() { /**  * 创建Dialog,参数为当前环境与样式.  */ builder = new AlertDialog.Builder(this); Vie

Win10 UWP开发系列:使用VS2015 Update2+ionic开发第一个Cordova App

安装VS2015 Update2的过程是非常曲折的.还好经过不懈的努力,终于折腾成功了. 如果开发Cordova项目的话,推荐大家用一下ionic这个框架,效果还不错.对于Cordova.PhoneGap.ionic.AngularJS这些框架或库的关系,我个人理解是这样,PhoneGap是一个商业项目,用来实现HTML5式的跨平台开发,后来Adobe公司将其中的核心代码开源,就是Cordova,Cordova只负责实现JavaScript调用原生代码的功能,是一个壳,而壳里具体用什么样式,在H

实现cell显示一个删除按钮

如果想实现滑动cell时,cell右边就能显示一个删除按钮,则要实现tableview 下边方法: - (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath 让一个cell实现滑动出现删除按钮 我们删除cell,一般调用方法 [tableView deleteRo

第六篇:在SOUI中用九宫格拉伸方式显示一个图片资源

SOUI的初学者刚开始可能难以搞清楚在SOUI中显示一个图片资源的流程,这里做一个简单的示范. 首先我们准备好一张图,以下图为例. 第一步,我们首先把这个图片文件复制到demo的uires目录下,新建一个目录jpg,下面只有这一个文件9.jpg 第二步,我们需要在uires.idx中引入该图片资源 <jpg> <file name="girl" path="jpg\9.jpg"/> </jpg> 我们给这个资源命名为"g

实现cell显示一个删除button

假设想实现滑动cell时,cell右边就能显示一个删除button,则要实现tableview 下边方法: - (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath 让一个cell实现滑动出现删除button 我们删除cell.一般调用方法 [tableView

领域驱动设计系列文章(1)——通过现实例子显示领域驱动设计的威力(转)

http://www.blogjava.net/johnnylzb/archive/2010/05/15/321057.html 领域驱动设计系列文章(1)——通过现实例子显示领域驱动设计的威力 曾经参与过系统维护或是在现有系统中进行迭代开发的软件工程师们,你们是否有过这样的痛苦经历:当需要修改一个Bug的时候,面对一个类中成百上千行的代码,没有注释,千奇百怪的方法和变量名字,层层嵌套的方法调用,混乱不堪的结构,不要说准确找到Bug所在的位置,就是要清晰知道一段代码究竟是做了什么也非常困难,最终

在线程中显示一个窗口(多个UI线程)

多数耗时操作可以异步执行,推荐async/await. 但和UI相关的部分仅能在UI线程执行,这时UI线程的耗时操作,导致界面卡死,不够友好. 我们可以创建一个单独的UI线程显示一个正在加载的窗口,可以在窗口显示一些动画之类的. 如果是WinForms那么很容易做到. Application.Run(new LoadingForm()); WPF没有提供这样简单的方式,官方文档中有示例<多窗口.多线程>,官方例子 ExceptionHandlingSecondaryUIThread 经过简化后