angularjs tab 功能实现
功能要求
点击菜单的时候,新增一个tab页面,当关闭一个页面的时候,显示旁边的tab页面
当一个tab页面是从之前的tab打开,例如是一个查询页面的tab页面,打开一个新增页面的时候,当新增页面提交成功后,需要关闭当前页面,并刷新原来的查询页面
实现
通过iframe方式实现
每个tab页面就是一个iframe,不会互相影响功能
各个tab里面的iframe 通过window.top. 方法进行调用下来的几个方法,例如:window.top.openTab
function openTab(id,name,url,params){
var appElement = document.querySelector('[ng-controller=mainCtrl]');
var scope=angular.element(appElement).scope();
scope.myTab.openWithParent(id,name,url,params);
scope.$apply();
}
//在一个tab里面关闭一个页面并回到父页面
function closeToParentTab(){
var appElement = document.querySelector('[ng-controller=mainCtrl]');
var scope=angular.element(appElement).scope();
scope.myTab.closeToParentTab();
scope.$apply();
}
//只是关闭页面
function close(){
var appElement = document.querySelector('[ng-controller=mainCtrl]');
var scope=angular.element(appElement).scope();
scope.myTab.close();
scope.$apply();
}
commonApp.directive('myTab',['commonService',function(commonService){
var myTab = {};
myTab.restrict="AE";
myTab.compile=function(element,attrs,$scope){
var objName=attrs.name;
if(objName == undefined){
objName="myTab";
}
var tab = {
list:[],
getCurrentOpenId:function(){
var currentTab=this.getCurrentTab();
if(currentTab!=undefined){
return currentTab.id;
}
},
getCurrentTab:function(){
for(var index=0;index<this.list.length;index++ ){
if(this.list[index].type=="show"){
return this.list[index];
}
}
},
//打开一个tab,如果该tab已经存在,就显示,如果没有,新开一个
open:function(id,name,url){
if(!this.changeTab(id)){
var elm={};
elm.id=id;
elm.parentId="";
elm.name=name;
elm.url=url;
elm.type="show";
this.list.push(elm);
}
},
/**
* id 新开页面的id
* name 新开页面的名称
* url 新开页面的地址
* params 表示要传入新开页面的参数
*/
openWithParent:function(id,name,url){
var parentId=this.getCurrentOpenId();
var childId=parentId+"_"+id;
if(!this.changeTab(childId)){
var elm={};
elm.id=childId;
elm.parentId=parentId;
elm.name=name;
elm.url=url;
elm.type="show";
this.list.push(elm);
}
},
//把所有tab页面变成不可显示
hideAll:function(){
for(var index=0;index<this.list.length;index++ ){
this.list[index].type="hide";
}
},
//切换tab页面
changeTab:function(id){
this.hideAll();
for(var index=0;index<this.list.length;index++ ){
if(this.list[index].id==id){
this.list[index].type="show";
return true;
}
}
return false;
},
cleanAll:function(){
this.list=[];
},
closeToParentTab:function(){
var currentTab=this.getCurrentTab();
if(currentTab!=undefined){
//关闭当前的页面
for(var index=0;index<this.list.length;index++ ){
if(this.list[index].id==currentTab.id){
this.list.splice(index,1);
break;
}
}
//切换到父页面
this.changeTab(currentTab.parentId);
}
}
};
var template=
'<ul id="tags" class="subnav" ng-show="'+objName+'.list.length>0">'
+'<li id="dh1" ng-class="{\'hover\':obj.type==\'show\'}" ng-repeat="obj in '+objName+'.list" ><a href="javascript:void(0)" ng-click="'+objName+'.changeTab(obj.id)" class="a1">{{obj.name}}</a><i class="subnav_icon icon"><a ng-click="'+objName+'.close(obj.id)" href="javascript:void(0)" class="gone"></a></i></li>'
+'</ul>'
+'<div ng-repeat="obj in '+objName+'.list" ng-show="obj.type==\'show\'" ><iframe frameborder="0" style="height:100%;visibility:inherit; width:100%;z-index:1;" ng-src="{{obj.url}}" scrolling="yes" id="tab_id_{{obj.id}}" ></iframe></div>';
element.html(template);
return function($scope,element,attrs){
tab.close=function(id){
var index=0;
for(;index<this.list.length;index++ ){
if(this.list[index].id==id){
this.list.splice(index,1);
break;
}
}
if(this.list.length==0){
$scope.loadIndex();
}else{
var showTabIndex=0;
if(index-1>0){
showTabIndex=index-1;
}
this.list[showTabIndex].type="show";
}
};
eval("$scope."+objName+"=tab");
};
};
return myTab;
}]);
分享到:
相关推荐
项目使用 angularJS ui-router-tabs angular-ui-router 实现tab页切换, 1、亮点 1)tab页间切换缓存tab页数据 2)刷新页面,保留已经打开的tab页,当前活动tab为上次活动的tab 3)使用嵌套路由,实现单页面应用
主要介绍了angularJS tab栏实现和mvc小案例,本文通过实例代码给大家介绍的非常详细,需要的朋友可以参考下
主要介绍了AngularJS实现tab选项卡的方法,结合实例形式较为详细的分析了AngularJS实现tab选项卡的原理、实现技巧与相关注意事项,需要的朋友可以参考下
WebUI4Angular是基于angularjs实现的一套UI组件,主要包括:datagrid,tree,dialog,progress,tilelist,tabset,dividedbox,imageview等等。组件需要使用angularjs1.3以上版本,其中拍照组件cameraScanner另需安装flash...
├最新AngularJS开发宝典—第059讲 tab面板组件的指令实现.mp4 ├最新AngularJS开发宝典—第060讲 服务server应用分析与使用场景.mp4 ├最新AngularJS开发宝典—第061讲 使用$scope.$apply进行数据脏检查.mp4 ├最新...
本篇文章主要介绍了angularjs实现上拉加载和下拉刷新数据功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
UI-Bootstrap是AngularJs团队在Bootstrap基础上,用AngularJs实现的一组UI控件,包括Tab页,手风琴,下拉菜单,模态窗口,日期选择等等。原生的这些控件在Bootstrap里是用Jquery写的,用了UI-Bootstrap就可以抛开...
本文实例讲述了AngularJS实现标签页tab选项卡功能。分享给大家供大家参考,具体如下: 选项卡一: JavaScript+html+css <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title&...
在实现Angularjs实现mvvm式的选项卡之前,先搬出我们常用的jquery实现。 1、jquery实现简单粗暴的选项卡效果 var nav = $(.tabs);//tab切换 var box = $(.box);//容器 nav.on(click, function(){ //点击事件 var...
介绍的是写一个通过指令嵌套实现tabs功能的指令模块,这也是我在一个项目中应用到的,现在分享给大家,有需要的可以参考借鉴。
本文实例讲述了angularjs实现table表格td单元格单击变输入框/可编辑状态。分享给大家供大家参考,具体如下: html部分: ;>序号 班次 分组 操作 ;>{{value.id }} <td>{{value.trainNu
需求: 上面是一个table,运用了 循环显示。现在的一个需求是:需要在每行添加一个字段,不过不能在同一行显示,需要在下一行显示。我首先想到了直接加个,不过没有办法换行。在下面再加个也不行。...
本文介绍了angularJs中datatable实现,有需要的小伙伴可以参考下 html引用derective: 代码如下: ”dtOptionsExample2″ class=”table> controller设置: $scope.dtOptions = { "bProcessing": true, ...
ReactJS是可以达到游戏级别的渲染,fps可以保持在60左右,相当的了不起,它做了一个虚拟dom tree加速了渲染过程,根据当时的数据说比angularjs快20%以上。 前沿 对于React, 去年就有耳闻, 挺不想学的, 前端那么...
目前,这可以通过从文件系统引用站点来实现,也可以将其托管到本地/外部httpserver中。 我建议将其与“自定义新标签” -addin一起使用,该标签支持预加载应用程序,将焦点置于URL栏并将其清空。 #Customization...
最终实现效果: index.html <!DOCTYPE html> <html> <head> [removed][removed] [removed][removed] <script src=//ajax.googleapis.com/ajax/libs/angularjs/1.5.8/angul