在一个项目中的同一个模块中,有多个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. Matlab 一些函数

    max(A,[],dim):dim取1或2.dim取1时,该函数和max(A)完全相同:dim取2时,该函数返回一个列向量,其第i个元素是A矩阵的第i行上的最大值.

  2. Day34 设计模式

    参考博客: http://www.cnblogs.com/alex3714/articles/5760582.html 什么是设计模式 Christopher Alexander:“每一个模式描述了一 ...

  3. 添加resx文件过程笔记

    为了测试资源文件,今天上午耗掉了.终于实现了,原来是要按照它自动建文件夹,不可以手动建.下图 见其他语言的时候一定要:Mytest.zh-CN.resx 这样,加上后缀名字 代码中获取资源 http: ...

  4. Django中构造响应对象的方式

    1 HttpResponse 可以使用django.http.HttpResponse来构造响应对象. HttpResponse(content=响应体, content_type=响应体数据类型, ...

  5. Linux网络编程IPv4和IPv6的inet_addr、inet_aton、inet_pton等函数小结

    知识背景: 210.25.132.181属于IP地址的ASCII表示法,也就是字符串形式.英语叫做IPv4 numbers-and-dots notation. 如果把210.25.132.181转换 ...

  6. Eclipse下配置Maven

    1.修改maven根目录下的conf/setting.xml文件,主要修改localRepository属性,用于管理maven下载的jar文件存放的位置. 2.修改eclipse的maven配置,w ...

  7. asp.net设置gridview页码显示遇到的问题

    问题:分页部分显示的页码撑开占满整个表格底部 解决方法: 1.通过浏览器察看源,发现是分页部分的table样式受到整个页面的table设置的样式的影响,分页是一个tr里面的td里面的table 2.设 ...

  8. python2 之 pyh2

    1.功能 pyh作爲基於python的簡易html生成庫,收到了廣大python愛好者(比如說我,當然其他人沒有調查過)的深切喜愛. 簡潔的行文風格繼承了python一貫的作風,可以讓你用簡單的Pyt ...

  9. Git详解之六 Git工具

    以下内容转载自:http://www.open-open.com/lib/view/open1328070367499.html Git 工具 现在,你已经学习了管理或者维护 Git 仓库,实现代码控 ...

  10. RBM

    1. 玻尔兹曼分布: $$p(E) \thicksim e^{-E/kT} $$ 2. RBM 两层:隐层和可视层, $\mathbf v$, $\mathbf h$ $$v_i \in \{0, 1 ...