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

关注微信订阅号:TongeBlog,可查看[ionic开源项目]全套教程。

截止到第10讲,tab1[健康]模块的功能基本已经完成了,但这一讲中,controller层又做了较大的改动,因为下一讲中tab2[医疗]模块的实现跟tab1类似,考虑到不让代码冗余,这里使用BaseCtrl将公共代码提取出来作为controller的基类,供其它模块使用,提取后的[健康]模块也对应有所改动。

目录

[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,如果你到这里碰到任何问题,欢迎通过下面的联系方式联系我。

时间: 2024-10-14 00:58:43

[ionic开源项目教程] - 第11讲 封装BaseController实现controller继承的相关文章

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

目录 [ionic开源项目教程] 第1讲 前言,技术储备,环境搭建,常用命令 [ionic开源项目教程] 第2讲 新建项目,架构页面,配置app.js和controllers.js [ionic开源项目教程] 第3讲 使用Tabs和SlideBox实现左右滑动菜单 [ionic开源项目教程] 第4讲 通过Service层获取新闻列表 [ionic开源项目教程] 第5讲 如何在项目中使用全局配置 [ionic开源项目教程] 第6讲 过滤器filter的使用 [ionic开源项目教程] 第7讲 实现

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

目录 [ionic开源项目教程] 第1讲 前言,技术储备,环境搭建,常用命令 [ionic开源项目教程] 第2讲 新建项目,架构页面,配置app.js和controllers.js [ionic开源项目教程] 第3讲 使用Tabs和SlideBox实现左右滑动菜单 [ionic开源项目教程] 第4讲 通过Service层获取新闻列表 [ionic开源项目教程] 第5讲 如何在项目中使用全局配置 [ionic开源项目教程] 第6讲 过滤器filter的使用 [ionic开源项目教程] 第7讲 实现

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

关注微信订阅号:TongeBlog,可查看[ionic开源项目]全套教程. 这一讲主要实现tab2[医疗]模块,[医疗]模块跟tab1[健康]模块类似. [ionic开源项目教程] - 第12讲 医疗模块的实现以及Service层loadMore和doRefresh的提取封装 [效果图] 1.实现tab2.html[医疗]模块的视图部分实现(跟tab1.html类似): <ion-view view-title="医疗"> <ion-slide-box show-pa

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

新建项目 由项目功能架构图选择合适的页面架构,这里选用Tab,ionic新建项目,默认的模板就是tab. $ ionic start TongeNews Creating Ionic app in folder C:\Users\Tonge\Source\Repos\TongeApp based on tabs project Downloading: https://github.com/driftyco/ionic-app-base/archive/master.zip [=========

[ionic开源项目教程] - 第1讲 前言,技术储备,环境搭建,常用命令

前言 这是一个系列文章,将持续更新到项目完结,从环境搭建开始讲解,包括实战开发中遇到的各种问题的解决方案,都将毫无保留的分享给大家. 技术储备 开始本项目之前,请确保自己对以下技术点都有所了解. html,css,html5,css3,javascript,angularjs, 理解mvc或者mvvm分层的概念 了解CLI基础. 环境搭建 (有福利) 都知道开发环境搭建是一个麻烦事,作者在这里精心准备了一个已经配置好的开发包,内含jdk,sdk,ant,adb,和一个android23的模拟器.

[ionic开源项目教程] - 第3讲 左右滑动菜单的实现(使用Tabs和SlideBox)

使用Tabs和SlideBox实现左右滑动菜单 1.将tab1.html的代码改为如下: <ion-view view-title="健康">  <ion-content class="has-header">    <ion-slide-box show-pager="false" class="has-header" on-slide-changed="slideChanged($i

[ionic开源项目教程] - 手把手教你使用移动跨平台开发框架Ionic开发一个新闻阅读APP

前言 这是一个系列文章,从环境搭建开始讲解,包括网络数据请求,将持续更新到项目完结.实战开发中遇到的各种问题的解决方案,也都将毫无保留的分享给大家. 项目介绍 本项目基于移动跨平台开发框架 Ionic 开发,主要包含健康.医疗.生活.农业.和用户五大模块,以下是功能架构图. 目录 第1讲 前言,技术储备,环境搭建,常用命令 第2讲 新建项目,架构页面,配置app.js和controllers.js 第3讲 使用Tabs和SlideBox实现左右滑动菜单 第4讲 第4讲 通过Service层获取新

ava 与 C++ 开源项目(2014.11)

*** Java *** 1.高效 Java Web 开发框架 JessMA 2.Java 日志切割清理工具 Log-Cutter *** C++ *** 1.通用高性能 Windows Socket 组件 HP-Socket 2.Windows C++ 应用程序通用日志组件 VC-Logger 一.Java 1.Java 全能高效 MVC & REST 开发框架 JessMA JessMA是功能完备的高性能 Full-Stack Web 应用开发框架,内置可扩展的 MVC Web 基础架构和

更新本人的 Java 与 C++ 开源项目(2014.11)

*** Java *** 1.高效 Java Web 开发框架 JessMA 2.Java 日志切割清理工具 Log-Cutter *** C++ *** 1.通用高性能 Windows Socket 组件 HP-Socket 2.Windows C++ 应用程序通用日志组件 VC-Logger 一.Java 1.Java 全能高效 MVC & REST 开发框架 JessMA JessMA是功能完备的高性能 Full-Stack Web 应用开发框架,内置可扩展的 MVC Web 基础架构和