关于tab的切换之共用html页面

在一个项目中的同一个模块中,有多个tab(并且多个tab对应的页面结构完全一样),tab的每次切换,不同tab调用不同的接口,利用一个switch进行判断,根据当前的类型去调用不同的接口,返回不同数据了,实现页面数据的刷新,

这样做的目的是为了减少html页面的重复,实现代码的复用...........................

(存在的问题,每次的页面刷新,只是数据的刷新,url没有进行更新,这会导致一个问题,那就是点击浏览器刷新页面的时候,不能记录当前的状态,每次都会返回到最初的页面,而不能记录当前的位置)

存在弊端的代码展示:

html:每次的tab切换,都会调用get_list()方法,这个方法会传递一个类型过去用于做判断

<ul class="list-inline">
    <li class="hand"  ng-click="get_list(‘裁判文书‘)">
        <button  class="btn my-tra-btn" ng-class="{‘my-nav-active‘:position_type==‘裁判文书‘}">裁判文书</button></li>
    <li class="hand"   ng-click="get_list(‘行业会议‘)">
        <button class="btn my-tra-btn" ng-class="{‘my-nav-active‘:position_type==‘行业会议‘}">行业会议</button></li>
    <li class="hand" ui-sref="laoli_video({type:‘老李说知产‘})">
        <button class="btn my-tra-btn" ng-class="{‘my-nav-active‘:position_type==‘老李说知产‘}">老李说知产</button></li>
    <li class="hand"   ng-click="get_list(‘人才报告‘)">
        <button class="btn my-tra-btn" ng-class="{‘my-nav-active‘:position_type==‘人才报告‘}"> 人才报告</button></li>
    <li class="hand"   ng-click="get_list(‘资讯‘)">
        <button class="btn my-tra-btn" ng-class="{‘my-nav-active‘:position_type==‘资讯‘}">资讯</button></li>
</ul>

js:ctrl/consult.js文件(利用angular-require的方法将多个小控制器放入一个文件中)

define([‘app‘, ‘services/filter‘, ‘services/setting‘, ‘api/news_api‘, ‘services/common‘, ‘directives/showimg/showimg‘, ‘directives/sharecomponent/sharecomponent‘], function (myapp) {
myapp.controller(‘news_list‘, [‘$scope‘, ‘$state‘, ‘$stateParams‘, ‘news_api‘, function (s, $state, $stateParams,news_api){  //获得列表数据     s.get_list = function (typename) {//typename:用于标识tab的切换            s.mypagers.bigCurrentPage = 1;//当前页归 "1"
            typename = typename;
            get_list_by_type(typename, s.mypagers.bigCurrentPage);
        }
        s.get_list(s.position_type);
        function get_list_by_type(typename, n) {
            switch (typename) {
                case "裁判文书" :
                {
                    s.hand_data.pPageIndex = n;//没测切换都要更新当前的页码
                    news_api.get_judge_document_list(s.hand_data)
                        .success(function (data) {
                          ...........//
                        })
                        .error(function (data) {
                            console.log(data);
                        });
                }
                    ;
                    break;
                case "行业会议" :
                {
                    s.position_type = "行业会议";
                    s.current_nav = "行业会议";
                    news_api.get_file_meeting_list({pageIndex: n, pageSize: 10})
                        .success(function (data) {
                           .................//
                        })
                        .error(function (data) {
                            console.log(data);
                        });
                }
                    ;
                    break;

                case "人才报告" :
                {
                    s.position_type = "人才报告";
                    s.current_nav = "人才报告";
                    news_api.get_human_resource_report_list({pageIndex: n, pageSize: 10}).success(function (data) {
                         .................//
                    }).error(function (data) {
                        console.log(data);
                    });
                }
                    ;
                    break;

                case "资讯" :
                {
                    s.position_type = "资讯";
                    s.current_nav = "资讯";
                    news_api.gethotnews({pageIndex: n, pageSize: 10})
                        .success(function (data) {
                           .................//
                        })
                        .error();
                }
                    ;
                    break;
            }
        }
myapp.controller(‘news_detaile‘, [‘$scope‘, ‘$stateParams‘, ‘$sce‘, ‘setting‘, ‘news_api‘, ‘$rootScope‘,    function (s, $stateParams, $sce, setting, news_api, $rootScope) {

}]

});
 

路由配置:

router.js中:
//行业会议,咨询,人才报告
define([‘app‘, ‘env‘,
    ‘router/news‘,
    ‘ctrl/rootctrl‘,
    ‘router/about‘,
    ‘router/badComment‘,
    ‘router/collect_doc‘,
    ‘router/consult‘
], function (myapp, env) {
$stateProvider.state(‘consult‘, {
    url: ‘/‘,
    views: {
        "main": {
            templateUrl: ‘tpls/news/news.html‘,
            resolve: {
                deps: $requireProvider.requireJS([//使用angular.require
                    ‘ctrl/consult‘
                ])
            },
            controller: ‘news_index_ctrl‘
        }
    }
});

router/consult.js中:
define([‘app‘], function (myapp) {
    myapp.config([‘$stateProvider‘, ‘$urlRouterProvider‘, ‘$locationProvider‘, ‘$requireProvider‘,
        function ($stateProvider, $urlRouterProvider, $locationProvider, $requireProvider) {
            $stateProvider.state(‘consult.news_list‘, {
                url: ‘news_list/:typename.html‘,
                views: {
                    ‘content‘: {
                        templateUrl: ‘tpls/news/content/news_list.html‘,//所有的tab,模块都共用一个news_list页面
                        controller:‘news_list‘
                    },
                    ‘c_right‘:{
                        templateUrl:‘tpls/news/c_right/c_right.html‘,
                        controller:‘news_ctrl‘
                    }
                }
            })
            .state(‘consult.news_detaile‘, {
                url: ‘:itemsid.html‘,
                views: {
                    ‘content‘: {
                        templateUrl: ‘tpls/news/content/news_detaile.html‘,//所有的tab都共用一个详情页面news_detail.html
                        controller: ‘news_detaile‘
                    },
                    "c_footer": {
                        templateUrl: ‘tpls/news/c_footer/c_footer.html‘,
                        controller:‘c_footer‘
                    },
                    ‘c_right‘:{
                        templateUrl:‘tpls/news/c_right/c_right.html‘,
                        controller:‘news_ctrl‘
                    }
                }
            })
        }])
});

对于上面存在的问题不同人可能会有不同的解决方法。

常见的一种:

1:页面的拆分,将每个tab都单独作为一个模块,分别建立各自的控制器

(弊端:没有实现html页面的公用,这是抛弃了问题,抛弃了利益的做法)

2:第二种就是,可以想办法每次在进行tab切换的时候,都会进行页面的刷新,url让其发生改变,便于浏览器记录。

在原来的基础上,我们只需要简单的改变就可以:

  //获得列表数据
        s.get_list = function (typename) {//typename:用于标识tab的切换
           // s.mypagers.bigCurrentPage = 1;//当前页归 "1"
            //typename = typename;
            //get_list_by_type(typename, s.mypagers.bigCurrentPage);
            //get_list_by_type(typename);

            $state.go("consult.news_list",{typename:typename});//这是为了刷新页面
        }
        var get_list_data=function(typename, n){
            get_list_by_type(typename, n);
        }
        get_list_data(s.position_type,s.mypagers.bigCurrentPage);

此后的每次点击tab,都会刷新页面,更新url

时间: 2024-11-04 19:49:51

关于tab的切换之共用html页面的相关文章

WEB 页面 控制表单内tab键切换的顺序

在Html代码中有一个键盘属性——tabindex,它可以设置访问者在页面中按tab键的顺序.如下: <input type="button" id="b1" tabIndex="1" value="Button1" /> <input type="button" id="b2" tabIndex="2" value="Button2&qu

前端的小玩意(9.1)——做一个仿360工具箱的web页面(Tab按钮切换)

需求: ①写一个web版的360工具箱,示意图如下: ②无左上返回按钮,右上按钮有皮肤切换,下拉框(但无点击逻辑): ③按钮点击有事件,但事件是console.log(按钮名): ④可以在全部工具和我等工具自由切换: ⑤可以点击左下角的编辑,然后根据实际表现设置: ⑥可以在全部工具里面,点击按钮,然后添加到我的工具这边来: ⑦效果尽量与原图相同,只使用jquery库: 效果网址: http://jianwangsan.cn/toolbox (一)tab页切换 ①切图: 先切图,如图:(不想用他的

JavaScript之tab面板切换

自己写了一个tab选项卡的切换,感觉还不错,跟大家分享一下. 一.点击切换 页面效果: html页面: <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>tab面板切换</title> <style> .content{width: 1000px;height: 500px;margin: 0 auto;border: 1px s

Win10使用“Alt+Tab”快捷键切换不了窗口怎么办

Win10使用"Alt+Tab"快捷键切换不了窗口怎么办?Alt+Tab快捷键有切换电脑页面窗口的功能,有时候发现居然切换不了,下面百事网小编给大家带来Win10使用"Alt+Tab"快捷键切换不了窗口的解决方法. 步骤如下: 1.点击开始菜单,选择运行,输入"regedit",点击确定,如图: 2.依次展开"HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Expl

Axure实现Tab选项卡切换功能

这几天用Axure画原型图的过程中,需要实现Tab选项卡切换的效果,但Axure中并没有类似于Tab控件的部件,所以可以用Axure中的动态面板(Dynamic Panel)来实现. 本文以已经汉化的Axure7.0为例,英语不太好的朋友可以先进行汉化(汉化的时候要注意版本,不同的版本,汉化文件也稍有差异). 具体实现步骤如下: 1.往页面中拖入一个动态面板部件: 2.给该动态面板部件添加几个状态: 操作方法为:双击该动态面板,点击左侧的加号添加状态,这里把四个添加的状态名称改为"选项卡1.选项

每天一个JavaScript实例-tab标签切换

<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>每天一个JavaScript实例-tab标签切换</title> <style> .tabcontainer{ padding:5px; width:500px; marg

利用target的特性,可以实现纯css的tab效果切换

基础知识: :target起作用的是href连接到的位置 如 <a href="#tab1">tab1</a> <div id="tab1" class="tab">This is a tab1</div> :target{ color:red; } 但点击a标签的时候,连接到id是tab1的div,对这个div起作用color:red; 如: <a href="#tab"

jQuery实现Tab选项卡切换

需求: 实现Tab选项卡切换,鼠标悬浮在标签上,进行Tab页面的切换 此处使用的是jQuery1.7.js 实现代码如下 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xh

Vue如何实现swiper左右滑动内容区控制导航tab同时切换高亮

Vue如何实现左右滑动内容区控制导航tab同时切换高亮,实现的效果是:点击导航按钮时内容区发生改变,左右滑动内容区时导航按钮跟随切换高亮,停留在某个内容区时刷新页面后仍然停留在当前内容区. 这里涉及到几个点: 1.左右滑动,那就需要用到swiper,当然你可以自己写一个类似的功能,虽然不难但是项目开发中可能会比你引入插件要耗时很多: 2.Vue开发鼓励组件化,所以在这我是分为nav和swiper两个组件,那么就要用到事件发射与接收,我在前面的博文有关于事件发射与接收的心得,具体点击查看: 3.利