关于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同时切换高亮,实现的效果是:点击导航按钮时内容区发生改变,左右滑动内容区时导航按钮跟随切换高亮,停留在某个内容区时刷新页面后仍然停留在当前内容区. ...
随机推荐
- Python之路,Day9 - 线程、进程、协程和IO多路复用
参考博客: 线程.进程.协程: http://www.cnblogs.com/wupeiqi/articles/5040827.html http://www.cnblogs.com/alex3714 ...
- Ubuntu下配置舒服的Python开发环境
Ubuntu 提供了一个良好的 Python 开发环境,但如果想使我们的开发效率最大化,还需要进行很多定制化的安装和配置.下面的是我们团队开发人员推荐的一个安装和配置步骤,基于 Ubuntu 12.0 ...
- vue组件间传值
父传子 1.父组件:在子组件容器内绑定数据 <router-view :unusedOrderNum="num1" :usedOrderNum="num2" ...
- [Eclipse]Eclipse快捷键
查看一个方法被谁调用:选中方法名字,Search-->Reference-->Workspace
- querySelectorAll 与jquery.find 与htmlcollection 的区别
querySelector 和 querySelectorAll 规范定义 querySelector 和 querySelectorAll 方法是 W3C Selectors API Level 1 ...
- LeetCode之Longest Substring Without Repeating Characters
[题目描述] Given a string, find the length of the longest substring without repeating characters. Exampl ...
- flowable ProcessEngine和ProcessEngineConfiguration
ProcessEngine是流程引擎,ProcessEngineConfiguration与前面四个引擎配置有些不同. ProcessEngineConfiguration增加了邮件服务和httpCl ...
- SpringMVC札集(06)——转发和重定向
自定义View系列教程00–推翻自己和过往,重学自定义View 自定义View系列教程01–常用工具介绍 自定义View系列教程02–onMeasure源码详尽分析 自定义View系列教程03–onL ...
- Android逆向之旅---Android中锁屏密码算法解析以及破解方案
一.前言 最近玩王者荣耀,下载了一个辅助样本,结果被锁机了,当然破解它很简单,这个后面会详细分析这个样本,但是因为这个样本引发出的欲望就是解析Android中锁屏密码算法,然后用一种高效的方式制作锁机 ...
- 评价指标的计算:accuracy、precision、recall、F1-score等
记正样本为P,负样本为N,下表比较完整地总结了准确率accuracy.精度precision.召回率recall.F1-score等评价指标的计算方式: (右键点击在新页面打开,可查看清晰图像) 简单 ...