关于tab的切换之共用html页面,而引发的页面跳转错乱问题
在一个项目中的同一个模块中,有多个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页面,而引发的页面跳转错乱问题的更多相关文章
- mui中如何使用tab来切换子页面 mui-bar, mui-bar-tab
mui是前端框架但是很多人用它写移动端 那么mui底部切换是怎么做到的呢? 如何点击某个tab来切换不同的页面? 解答: 1首先我们需要引入mui框架的底部tab元素 代码如下 <!--tabl ...
- 微信小程序小技巧系列《一》幻灯片,tab导航切换
作者:gou-tian 来自:github 幻灯片 使用微信小程序原生组件swiper实现. <swiper indicator-dots="{{indicatorDots}}&quo ...
- 利用target的特性,可以实现纯css的tab效果切换
基础知识: :target起作用的是href连接到的位置 如 <a href="#tab1">tab1</a> <div id="tab1& ...
- 【Little Demo】从简单的Tab标签到Tab图片切换
Tab标签切换效果是比较流行的一种网站页面布局,视觉表现为美观大方,通过标签展示内容.目前在各大网站都有存在这种效果.例如:淘宝的黄金位置使用Tab标签切换效果,网易新闻等. 1.简单的 Tab 标签 ...
- js监听浏览器tab窗口切换
js监听浏览器tab窗口切换 ——IT唐伯虎 摘要:js监听浏览器tab窗口切换. if (document.hidden !== undefined) { document.addEventLis ...
- jQuery----jquery实现Tab键切换
使用Jquery实现tab键切换,代码简洁易懂,实现逻辑清晰明了.具体总结如下: 需求分析: 鼠标进入tab切换模块,鼠标当前的模块上边框变为红色,并显示对应的商品名称.鼠标离开后,上边框恢复原色,图 ...
- [javascript]switchTab:仿腾讯首页Tab栏切换js插件
腾讯首页的每个新闻栏目都是一个tab选项卡切换,属于延迟动作的:鼠标hover上去之后200毫秒才会切换,防止了因为浏览滑动导致的页面上选项卡的频繁切换.仿照这样的效果,自己写了一个js插件,实现了低 ...
- Axure实现Tab选项卡切换功能
这几天用Axure画原型图的过程中,须要实现Tab选项卡切换的效果,但Axure中并没有类似于Tab控件的部件,所以能够用Axure中的动态面板(Dynamic Panel)来实现. 本文以已经汉化的 ...
- Vue如何实现swiper左右滑动内容区控制导航tab同时切换高亮
Vue如何实现左右滑动内容区控制导航tab同时切换高亮,实现的效果是:点击导航按钮时内容区发生改变,左右滑动内容区时导航按钮跟随切换高亮,停留在某个内容区时刷新页面后仍然停留在当前内容区. ...
随机推荐
- dump相关
命令:jmap -dump:format=b,file=/tmp/dump.hprof pid jstack -l 30087 >> text.txt
- vue踩坑之旅 -- computed watch
vue踩坑之旅 -- computed watch 经常在使用vue初始化组件时,会报一些莫名其妙的错误,或者,数据明明有数据,确还是拿不到,这是多么痛苦而又令人忍不住抓耳挠腮,捶胸顿足啊 技术点 v ...
- yum 认知及使用
https://www.cnblogs.com/zhichaoma/p/7533247.html
- LeetCode OJ:Decode Ways(解码方法)
A message containing letters from A-Z is being encoded to numbers using the following mapping: 'A' - ...
- [转载]Spring源码下载地址
转载自:http://blog.csdn.net/liuzheng2684/article/details/6534722,谢谢! 今天想下载一下spring的源代码,登录到Spring官网,傻眼了, ...
- img 在chrome和Firefox下的兼容性
Firefox 5.下:没有重叠在一起: chrome 下: 两个重叠在一起, 原因: img标签,在两个浏览器下展示效果不一样, 解决办法:指明展示:
- MongoDB 安装、运行、使用、数据恢复
1.安装MongoDB社区版 # . 导入MongoDB public GPG Key sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com ...
- postfix邮件服务器搭建04-终结篇
本来是计划对postfix做一个全系列的安装文档的,不过在查某个知识点的时候,偶然找到一个已经写好的postfix全系列文章,在全部看完之后惊为天人,我认为:总体上会比我要写的要好,所以我准备借用一下 ...
- 小程序开发之改变data中数组或对象的某一属性值
前言:在小程序的开发中,我们在view中便利data中数组或对象时,很多情况下需要在js中动态改变数组或者对象中某一香的属性值. 效果图: 我给大家总结了案例如下: wxml如下: <scr ...
- HDU1800 hash+去前导0
注意一:卡map的时间,但是好好写+运气还是可以卡过,哇...求人品爆发 注意二:去前导0,毕竟‘0’也有ASCII码 #include<cstdio> #include<cstdl ...