第4讲:通Service层获取数据列表

上一讲中页面的基本架构已完成,这一讲介绍如何通过service层从服务器请求数据,在通过controller层为载体,显示到视图层。

1.在services.js的Tab1Service中添加一个getList的函数,用来获取数据列表

  1. .service('Tab1Service', function ($http) {
  2. this.getClassify = function () {
  3. return [
  4. { name: '健康资讯', viewable: true, url: domain + '/info/list', page: 1, rows: 20 },
  5. { name: '健康知识', viewable: false, url: domain + '/lore/list', page: 1, rows: 20 },
  6. { name: '健康问答', viewable: false, url: domain + '/ask/list', page: 1, rows: 20 },
  7. { name: '健康图书', viewable: false, url: domain + '/book/list', page: 1, rows: 20 }
  8. ]
  9. }
  10.  
  11. this.getList = function (url, page, rows) {
  12. return $http.post(url, { page: page, rows: rows })
  13. }
  14. })

2.完善controller.js的TabCtrl,使用Tab1Service.getList函数来获取数据列表,通过$scope.items作为数据载体。

  1. .controller('Tab1Ctrl', function ($scope,$rootScope, Tab1Service, $ionicSlideBoxDelegate, $ionicTabsDelegate) {
  2. $rootScope.imgUrl = imgUrl;
  3.  
  4. var classify = Tab1Service.getClassify()
  5. $scope.slides = classify;
  6. $scope.tabs = classify;
  7.  
  8. var slideIndex = 0;
  9. Tab1Service.getList(classify[0].url, 1, 20).then(function (response) {
  10. if (response.data.status) {
  11. $scope.items = response.data.tngou;
  12. console.log(response.data);
  13. }
  14. }, function (error) {
  15. console.log(error);
  16. })
  17.  
  18. $scope.slideChanged = function (index) {
  19. //这里使用instances[1]的原因是视图中有两个tabs
  20. $ionicTabsDelegate._instances[1].select(index);
  21. };
  22. $scope.$on('$ionicView.afterEnter', function () {
  23. //等待视图加载完成的时候默认选中第一个菜单
  24. $ionicTabsDelegate._instances[1].select($ionicSlideBoxDelegate.currentIndex());
  25. });
  26.  
  27. $scope.selectedTab = function (index) {
  28. //滑动的索引和速度
  29. $ionicSlideBoxDelegate.slide(index)
  30. }
  31.  
  32. })

3.视图层tab1.html的最终代码

  1. <ion-view view-title="健康">
  2. <ion-content class="has-header">
  3. <ion-slide-box show-pager="false" class="has-header" on-slide-changed="slideChanged($index)">
  4. <ion-slide ng-repeat="slide in slides">
  5. <div class="list">
  6. <a ng-repeat="item in items" class="item item-thumbnail-right item-text-wrap" href="#">
  7. <img ng-src="{{imgUrl+item.img}}" width="30" height="30" alt="">
  8. <h3>{{::item.title}}</h3>
  9. <p>{{::item.description | substring:item.description}}</p>
  10. </a>
  11. </div>
  12. </ion-slide>
  13. </ion-slide-box>
  14. </ion-content>
  15. <ion-tabs class="tabs-striped tabs-top">
  16. <ion-tab ng-repeat="item in tabs" on-select="selectedTab($index)" title="{{item.name}}"></ion-tab>
  17. </ion-tabs>
  18.  
  19. </ion-view>

4.代码解释

视图层只有list内的标签做了改动。

  • ng-repeat="item in items":数据列表的载体。
  • imgUrl+item.img:补充图片服务器链接,请参考 第5讲 在项目中使用全局配置
  • substring:请参考 第6讲 如何使用filter过滤器

完!

[ionic开源项目教程] - 第4讲 通Service层获取数据列表的更多相关文章

  1. [ionic开源项目教程] - 第8讲 根据菜单分类加载数据(重要)

    [ionic开源项目教程] - 第8讲  根据菜单分类加载数据(重要) [效果图] 注意 今天遇到一个比较棘手的问题,就是左右滑动菜单的设计不合理性,所以tab1.html对应的视图层和control ...

  2. [ionic开源项目教程] - 第11讲 封装BaseController实现controller继承

    关注微信订阅号:TongeBlog,可查看[ionic开源项目]全套教程. 截止到第10讲,tab1[健康]模块的功能基本已经完成了,但这一讲中,controller层又做了较大的改动,因为下一讲中t ...

  3. [ionic开源项目教程] - 第10讲 新闻详情页的用户体验优化

    目录 [ionic开源项目教程] 第1讲 前言,技术储备,环境搭建,常用命令 [ionic开源项目教程] 第2讲 新建项目,架构页面,配置app.js和controllers.js [ionic开源项 ...

  4. [ionic开源项目教程] - 第9讲 新闻详情页的实现

    目录 [ionic开源项目教程] 第1讲 前言,技术储备,环境搭建,常用命令 [ionic开源项目教程] 第2讲 新建项目,架构页面,配置app.js和controllers.js [ionic开源项 ...

  5. [ionic开源项目教程] - 第14讲 ionic解决跨域问题

    [ionic开源项目教程] 第14讲 使用jsonp解决跨域问题 相信很多朋友在开发中都会遇到以下这个问题. No 'Access-Control-Allow-Origin' header is pr ...

  6. [ionic开源项目教程] - 第12讲 医疗模块的实现以及Service层loadMore和doRefresh的提取封装

    关注微信订阅号:TongeBlog,可查看[ionic开源项目]全套教程. 这一讲主要实现tab2[医疗]模块,[医疗]模块跟tab1[健康]模块类似. [ionic开源项目教程] - 第12讲 医疗 ...

  7. [ionic开源项目教程] - 第13讲 Service层优化,提取公用Service,以及生活和农业两大模块的实现

    关注微信订阅号:TongeBlog,可查看[ionic开源项目]全套教程. 这一讲主要实现生活和农业两大模块的实现,在这个过程中,对service层提取出一个公用的BaseService. 这一讲分为 ...

  8. [ionic开源项目教程] - 第15讲 ionic用户个人中心登录注册的实现

    第15讲 ionic用户个人中心登录注册的实现 这一讲包括登陆.注册.个人中心.个人资料页面的实现. 在一讲的改动有四个地方: 在config.js里配置接口地址 完善个人中心的服务层(service ...

  9. [ionic开源项目教程] - 第2讲 新建项目,配置app.js和controllers.js搭建基础视图

    新建项目 由项目功能架构图选择合适的页面架构,这里选用Tab,ionic新建项目,默认的模板就是tab. $ ionic start TongeNews Creating Ionic app in f ...

随机推荐

  1. PHP第一课:开发环境配置

    最近在学php,大概了解了一下php的语法结构,以及一些php及基础的知识.由此想到了要亲手试一试:以为以前是学java的用的  ide是myeclipse,所以对eclipse软件布局有特别的钟爱. ...

  2. LCIS(m*n) 最长公共上升子序列

    详见:http://wenku.baidu.com/view/3e78f223aaea998fcc220ea0n3的: for(int i=1;i<=n;i++)             for ...

  3. 13test05:亲密数

    /*#include<iostream> using namespace std; int main() {int sum[3000]={0}; for(int i=1;i<3000 ...

  4. jquey ajax 无刷新提交form

    http://bbs.csdn.net/topics/380237868 $.ajax({ type: "POST", url:ajaxCallUrl, data:$('#your ...

  5. HDU 2571 命运 动态规划

    命运 http://acm.hdu.edu.cn/showproblem.php?pid=2571 Problem Description 穿过幽谷意味着离大魔王lemon已经无限接近了!可谁能想到, ...

  6. hdu 4023 Game 博弈论

    思路: 将15种分成5类: 1.1和2为一类: 2.3,4,5,6为一类: 3.7,8,9,10为一类: 4.11,12,13,14,15为一类: 5.15为一类. 比较各类的优先级,就会发现放置的顺 ...

  7. POJ2402/UVA 12050 Palindrome Numbers 数学思维

    A palindrome is a word, number, or phrase that reads the same forwards as backwards. For example,the ...

  8. pycharm控制台中文乱码问题

    pycharm控制台中文乱码问题一般是因为之前有配置保存到了文件里, C盘下.pycharm文件夹下有配置文件,删除文件后重装pycharm,配置会重置 不过最后解决问题的做法是删除配置文件后,重新装 ...

  9. js 异步请求封装

    1. function ajax(url, onsuccess) { var xmlhttp = window.XMLHttpRequest ? new XMLHttpRequest() : new ...

  10. React组件-mixin

    一.组件 二.代码 <!DOCTYPE html> <html lang="zh-cn"> <head> <meta charset=&q ...