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

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

(存在的问题,每次的页面刷新,只是数据的刷新,url没有进行更新,这会导致一个问题,那就是点击浏览器刷新页面的时候,不能记录当前的状态,每次都会返回到最初的页面,而不能记录当前的位置,有可能发生页面跳转错乱的问题<一般就是你的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

关于tab的切换之共用html页面,而引发的页面跳转错乱问题的更多相关文章

  1. mui中如何使用tab来切换子页面 mui-bar, mui-bar-tab

    mui是前端框架但是很多人用它写移动端 那么mui底部切换是怎么做到的呢? 如何点击某个tab来切换不同的页面? 解答: 1首先我们需要引入mui框架的底部tab元素 代码如下 <!--tabl ...

  2. 微信小程序小技巧系列《一》幻灯片,tab导航切换

    作者:gou-tian 来自:github 幻灯片 使用微信小程序原生组件swiper实现. <swiper indicator-dots="{{indicatorDots}}&quo ...

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

    基础知识: :target起作用的是href连接到的位置 如 <a href="#tab1">tab1</a> <div id="tab1& ...

  4. 【Little Demo】从简单的Tab标签到Tab图片切换

    Tab标签切换效果是比较流行的一种网站页面布局,视觉表现为美观大方,通过标签展示内容.目前在各大网站都有存在这种效果.例如:淘宝的黄金位置使用Tab标签切换效果,网易新闻等. 1.简单的 Tab 标签 ...

  5. js监听浏览器tab窗口切换

    js监听浏览器tab窗口切换 ——IT唐伯虎 摘要:js监听浏览器tab窗口切换. if (document.hidden !== undefined) {  document.addEventLis ...

  6. jQuery----jquery实现Tab键切换

    使用Jquery实现tab键切换,代码简洁易懂,实现逻辑清晰明了.具体总结如下: 需求分析: 鼠标进入tab切换模块,鼠标当前的模块上边框变为红色,并显示对应的商品名称.鼠标离开后,上边框恢复原色,图 ...

  7. [javascript]switchTab:仿腾讯首页Tab栏切换js插件

    腾讯首页的每个新闻栏目都是一个tab选项卡切换,属于延迟动作的:鼠标hover上去之后200毫秒才会切换,防止了因为浏览滑动导致的页面上选项卡的频繁切换.仿照这样的效果,自己写了一个js插件,实现了低 ...

  8. Axure实现Tab选项卡切换功能

    这几天用Axure画原型图的过程中,须要实现Tab选项卡切换的效果,但Axure中并没有类似于Tab控件的部件,所以能够用Axure中的动态面板(Dynamic Panel)来实现. 本文以已经汉化的 ...

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

    Vue如何实现左右滑动内容区控制导航tab同时切换高亮,实现的效果是:点击导航按钮时内容区发生改变,左右滑动内容区时导航按钮跟随切换高亮,停留在某个内容区时刷新页面后仍然停留在当前内容区.       ...

随机推荐

  1. ansible 调用playbook api执行(一)

    一 调用ansible playbook api执行playbook 1 准备好hosts文件 root@ansible:~/ansible/playbooks# cat hosts [all:var ...

  2. 【zznu-夏季队内积分赛3-G】2333

    题目描述 “别人总说我瓜,其实我一点也不瓜,大多数时候我都机智的一批“ 宝儿姐考察你一道很简单的题目.给你一个数字串,你能判断有多少个连续子串能整除3吗? 输入 多实例输入,以EOF结尾,每行一个数字 ...

  3. SQL SERVER 算法执行效率

    较差的性能 <---没有索引(为每个表执行表扫描) --->非聚集非覆盖索引(seek+局部有序扫描+lookups) ---> 聚集索引(seek+局部扫描) ---> 非聚 ...

  4. LeetCode OJ:Remove Duplicates from Sorted List II(链表去重II)

    Given a sorted linked list, delete all nodes that have duplicate numbers, leaving only distinct numb ...

  5. 完成users中的models

    用户表中添加邮箱验证码数据表,轮播图数据表 from django.db import models from django.contrib.auth.models import AbstractUs ...

  6. 缺一个UI设计

    这几天弄小程序的界面真的是太艰难了,神呐,请赐我一个UI吧 甚至,在第二种布局下的渐变过渡,都拿笔来计算了TT 还有这个色调的选择,在避免过渡效果突兀的处理上,真的是很费工夫啊: 我谁都不服,就服那些 ...

  7. Chrome浏览器清除页面js文件缓存的方法

    Chrome浏览器清除页面js文件缓存 Chrome浏览器清除js缓存方法虽然简单,但有些人还是不太会,有些人会去设置里面清除有时候没有用,这里写一下简单步骤,使用一次以后就会了,而且速度更快 1.打 ...

  8. [Linux] 随机切分文件内容

    1.从原文件中随机选出若干行 可以直接用shuf命令就可以完成: $ shuf -n source.txt > target.txt shuf命令的说明: $ shuf --help Usage ...

  9. Mac怎么快速创建便签和发送附件的邮件

    1.如何快速创建便签        在Mac的任意界面选中文字:shift+command+y 就能创建便签2.如何快速发送附件的邮件(网页界面)        在Safari网页界面 command ...

  10. caffe配置

    2016年最开心的事哈哈哈. 基本参照它. http://www.linuxdiyf.com/linux/12708.html 有时间在稍微写点. linux下:(装上GPU之后,在bois貌似禁止了 ...