[ionic开源项目教程] - 第11讲 封装BaseController实现controller继承
关注微信订阅号:TongeBlog,可查看[ionic开源项目]全套教程。
截止到第10讲,tab1[健康]模块的功能基本已经完成了,但这一讲中,controller层又做了较大的改动,因为下一讲中tab2[医疗]模块的实现跟tab1类似,考虑到不让代码冗余,这里使用BaseCtrl将公共代码提取出来作为controller的基类,供其它模块使用,提取后的[健康]模块也对应有所改动。
目录
[ionic开源项目教程] 第7讲 实现下拉刷新上拉加载ion-refresher和ion-infinite-scroll
- [ionic开源项目教程] 第11讲 封装BaseController实现controller继承
- [ionic开源项目教程] 第12讲 医疗模块的实现以及Service层loadMore和doRefresh的提取封装
- [ionic开源项目教程] 第13讲 Service层继续优化,提取公用Service,以及生活和农业两大模块的实现
[ionic开源项目教程] - 第11讲 封装BaseController实现controller继承
[效果图]

1.封装BaseController
.controller('BaseCtrl', function ($scope, $rootScope, $ionicSlideBoxDelegate, $ionicTabsDelegate) {
$rootScope.imgUrl = server.imgUrl;
//slide集合
$scope.slides = $scope.classify;
//顶部菜单
$scope.tabs = $scope.classify;
$scope.getData = function (c) {
// 安卓平台不会自动触发加载
if (ionic.Platform.isAndroid()) {
c.doRefresh();
}
// 初始化数据,和回调函数
c.isload = false;
c.callback = function () {
$scope.$broadcast('scroll.refreshComplete');
$scope.$broadcast('scroll.infiniteScrollComplete');
}
}
// 初始化第一个tab的数据
$scope.getData($scope.classify[0]);
//重要:因为页面中用了n个tabs组建,所以这里通过每个controller对应的currentTabId来判断哪个tabs来做选中操作。
var selectTab = function (index) {
angular.forEach($ionicTabsDelegate._instances, function (tabs) {
if ($scope.currentTabId == tabs.$element[0].id) {
tabs.select(index);
}
})
}
$scope.slideChanged = function (index) {
var c = $scope.classify[index]
$scope.getData(c);
//选中tabs
selectTab(index);
};
$scope.$on('$ionicView.afterEnter', function () {
//选中tabs
selectTab($ionicSlideBoxDelegate.currentIndex());
});
$scope.selectedTab = function (index) {
//滑动的索引和速度
$ionicSlideBoxDelegate.slide(index)
}
$scope.$on('$ionicView.beforeEnter', function () {
console.log('已经成为活动视图');
$ionicTabsDelegate.showBar(true);
});
})
2.controller的基类封装完成后,调整[健康]模块的tab1.html和Tab1Ctrl的代码。
tab1.html,这里将tabs组建做了唯一标识。
<ion-tabs id="{{currentTabId}}" class="tabs-striped tabs-top">
<ion-tab ng-repeat="item in tabs" on-select="selectedTab($index)" title="{{item.name}}"></ion-tab>
</ion-tabs>
Tab1Ctrl,这里直接调用BaseCtrl中的函数,注意这里的currentTabId的唯一标识。
.controller('Tab1Ctrl', function ($scope, $state, $controller, Tab1Service, $ionicTabsDelegate) {
$scope.classify = Tab1Service.getClassify()
$scope.currentTabId = "tab1";
//调用父级控制器之前先初始化需要的数据 这里要准备的就是分类 和 tab的索引
$controller('BaseCtrl', { $scope: $scope });
$scope.goDetails = function (item, type) {
$state.go('tab.tab1-details', { id: item.id, title: item.title, type: type })
$ionicTabsDelegate.showBar(false);
}
})
可以看到Tab1的代码简化10行都不到,大部分操作到在BaseCtrl里。下一讲实现[医疗]模块也同样是这个做法。
ok,如果你到这里碰到任何问题,欢迎通过下面的联系方式联系我。
[ionic开源项目教程] - 第11讲 封装BaseController实现controller继承的更多相关文章
- [ionic开源项目教程] - 第10讲 新闻详情页的用户体验优化
目录 [ionic开源项目教程] 第1讲 前言,技术储备,环境搭建,常用命令 [ionic开源项目教程] 第2讲 新建项目,架构页面,配置app.js和controllers.js [ionic开源项 ...
- [ionic开源项目教程] - 第9讲 新闻详情页的实现
目录 [ionic开源项目教程] 第1讲 前言,技术储备,环境搭建,常用命令 [ionic开源项目教程] 第2讲 新建项目,架构页面,配置app.js和controllers.js [ionic开源项 ...
- [ionic开源项目教程] - 第12讲 医疗模块的实现以及Service层loadMore和doRefresh的提取封装
关注微信订阅号:TongeBlog,可查看[ionic开源项目]全套教程. 这一讲主要实现tab2[医疗]模块,[医疗]模块跟tab1[健康]模块类似. [ionic开源项目教程] - 第12讲 医疗 ...
- [ionic开源项目教程] - 第8讲 根据菜单分类加载数据(重要)
[ionic开源项目教程] - 第8讲 根据菜单分类加载数据(重要) [效果图] 注意 今天遇到一个比较棘手的问题,就是左右滑动菜单的设计不合理性,所以tab1.html对应的视图层和control ...
- [ionic开源项目教程] - 第14讲 ionic解决跨域问题
[ionic开源项目教程] 第14讲 使用jsonp解决跨域问题 相信很多朋友在开发中都会遇到以下这个问题. No 'Access-Control-Allow-Origin' header is pr ...
- [ionic开源项目教程] - 第13讲 Service层优化,提取公用Service,以及生活和农业两大模块的实现
关注微信订阅号:TongeBlog,可查看[ionic开源项目]全套教程. 这一讲主要实现生活和农业两大模块的实现,在这个过程中,对service层提取出一个公用的BaseService. 这一讲分为 ...
- [ionic开源项目教程] - 第2讲 新建项目,配置app.js和controllers.js搭建基础视图
新建项目 由项目功能架构图选择合适的页面架构,这里选用Tab,ionic新建项目,默认的模板就是tab. $ ionic start TongeNews Creating Ionic app in f ...
- [ionic开源项目教程] - 第15讲 ionic用户个人中心登录注册的实现
第15讲 ionic用户个人中心登录注册的实现 这一讲包括登陆.注册.个人中心.个人资料页面的实现. 在一讲的改动有四个地方: 在config.js里配置接口地址 完善个人中心的服务层(service ...
- [ionic开源项目教程] - 第5讲 如何在项目中使用全局配置
第5讲 如何在项目中使用全局配置? Q:ionic开发,说纯粹一点,用的就是html+css+js,那么无疑跟web开发的方式是类似的.在这里给大家分享一个小技巧,如何在项目中使用全局配置? A:我的 ...
随机推荐
- VC中Source Files, Header Files, Resource Files,External Dependencies的区别
VC中Source Files, Header Files, Resource Files,External Dependencies的区别 区别: Source Files 放源文件(.c..cpp ...
- winform中的时间轴控件
我现在做的项目遇到一个需求,就是有没有类似的控件: 我要实现的功能是:播放录像. 某个时间段内假如有2个录像,这个坐标表示的是时间,假如我现在拖动时间轴,拖到第一个录像里面开始播放第一个录像,拖到2个 ...
- poj 2425 A Chess Game 博弈论
思路:SG函数应用!! 代码如下: #include<iostream> #include<cstdio> #include<cmath> #include< ...
- Java 动态代理机制分析及扩展
Java 动态代理机制分析及扩展,第 1 部分 王 忠平, 软件工程师, IBM 何 平, 软件工程师, IBM 简介: 本文通过分析 Java 动态代理的机制和特点,解读动态代理类的源代码,并且模拟 ...
- 基于ant的jmeter自动化性能测试
准备工作: 1.java的运行环境正常,及运行java -version.javac -version能正常输出java版本: 2.ant的运行环境正常,使用ant需要配置环境变量,编辑/etc/pr ...
- Linux下查看进程和线程
在linux中查看线程数的三种方法 1.top -H 手册中说:-H : Threads toggle 加上这个选项启动top,top一行显示一个线程.否则,它一行显示一个进程. 2.ps xH 手册 ...
- JavaPersistenceWithHibernate第二版笔记-第五章-Mapping value types-005控制类型映射(Nationalized、@LOB、@org.hibernate.annotations.Type)
一.简介 1. 2. 3. 4. to override this default mapping. The JPA specification has a convenient shortcut a ...
- 关于J-LINK升级最新固件后无法连上的一点分析
昨天升级了最新的 Keil MDK 4.53,怕它老是提示 J-Link 要升级,就去 SEGGER 的网站下了个最新版的 J-Link 软件包(4.46F 版的),装好后运行 J-Link Comm ...
- intellij idea搭建ssh开发框架之绑定数据源
原文:intellij idea搭建ssh开发框架之绑定数据源 在intellij idea中绑定数据源并生成hibernate实体对象.在IDE中的右边找到Database标签. 点击弹出窗口中的图 ...
- Android 代码检查工具SonarQube
http://blog.csdn.net/rain_butterfly/article/details/42170601 代码检查工具能帮我们检查一些隐藏的bug,代码检查工具中sonar是比较好的一 ...