`
liyiye
  • 浏览: 426903 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

angularjs tab 实现

阅读更多

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;

}]);



0
3
分享到:
评论

相关推荐

    angularjs渲染bootstraps实现tab页切页面不刷新换使用ui-router-tabs插件

    项目使用 angularJS ui-router-tabs angular-ui-router 实现tab页切换, 1、亮点 1)tab页间切换缓存tab页数据 2)刷新页面,保留已经打开的tab页,当前活动tab为上次活动的tab 3)使用嵌套路由,实现单页面应用

    AngularJS tab栏实现和mvc小案例实例详解

    本文将详细介绍如何在AngularJS中实现tab栏功能,并结合一个简单的MVC(Model-View-Controller)案例进行详解。 首先,来看看AngularJS中的tab栏实现。AngularJS提供了一些内置指令来帮助开发者快速实现tab栏,如`...

    AngularJS实现tab选项卡的方法详解

    在AngularJS中,实现tab选项卡功能是一种常见的需求,它能帮助用户更好地组织和展示大量信息。本篇文章将深入探讨如何使用AngularJS实现这一功能,包括基本原理、实现技巧以及注意事项。 首先,AngularJS的核心是...

    Angularjs实现mvvm式的选项卡示例代码

    通过使用AngularJS,开发者能够以声明式的方式将视图与模型绑定,从而实现数据的双向绑定和DOM操作的自动化。 本文将介绍如何使用AngularJS来实现MVVM式的选项卡效果。首先,我们看到在传统的jQuery实现中,通过...

    AngularJS标签页tab选项卡切换功能经典实例详解

    在本文中,我们将深入探讨AngularJS实现标签页(Tab选项卡)切换功能的经典实例详解。首先,我们要明确标签页切换功能在前端开发中是一种常见的交互模式,它允许用户通过不同的标签切换查看不同的内容区域,而不必...

    Web开发中Tab页的简单实现

    当然,实际开发中,我们可以利用现有的前端框架和库,如Bootstrap、AngularJS、Vue.js等,它们提供了内置的Tab组件,简化了开发过程。例如,在Bootstrap中,只需要添加适当的类名和数据属性,就可以快速创建功能完善...

    WebUI4Angular是基于angularjs实现的一套UI组件

    WebUI4Angular是基于angularjs实现的一套UI组件,主要包括:datagrid,tree,dialog,progress,tilelist,tabset,dividedbox,imageview等等。组件需要使用angularjs1.3以上版本,其中拍照组件cameraScanner另需安装flash...

    AngularJS实现标签页的两种方式

    本文将介绍在AngularJS中实现标签页功能的两种方法:一种是使用普通的指令,另一种是通过自定义指令来完成。 首先,利用普通指令实现标签页是非常直接的方法,主要依赖于AngularJS提供的ng-class和ng-click指令。在...

    最新AngularJS开发宝典视频教程 后盾网AngularJS培训视频教程 后盾网.txt

    ├最新AngularJS开发宝典—第059讲 tab面板组件的指令实现.mp4 ├最新AngularJS开发宝典—第060讲 服务server应用分析与使用场景.mp4 ├最新AngularJS开发宝典—第061讲 使用$scope.$apply进行数据脏检查.mp4 ├最新...

    用AngularJS的指令实现tabs切换效果

    在Web开发中,AngularJS是一个广泛使用的前端框架,而实现Tab切换效果是常见的用户界面交互之一。AngularJS提供了强大的指令功能,可以让我们通过定义自定义指令来创建可复用的组件,实现复杂的交互效果,比如Tab...

    angularjs实现上拉加载和下拉刷新数据功能

    在本文中,我们将深入探讨如何使用AngularJS实现上拉加载和下拉刷新数据的功能。这两个功能在现代Web应用中非常常见,特别是在数据流不断更新的列表场景中,如消息、通知或动态内容。 首先,下拉刷新是用户通过将...

    Tab控件(1.访淘宝Tab,2.访博客园(新闻频道的Tab))

    在网页设计和开发中,Tab控件是一种常见的用户界面元素,用于组织和展示大量信息,让...在实际开发中,开发者可以根据需求选择合适的框架和库,如Bootstrap、AngularJS等,它们提供了现成的Tab组件,简化了开发流程。

    非常好的一个tab选项卡

    在实际的开发过程中,实现tab选项卡的方式多种多样,常见的JavaScript库如jQuery、Bootstrap、AngularJS等都提供了方便的API来创建tab组件。而对于VS2005,开发者可能使用纯JavaScript,或者使用诸如ASP.NET AJAX ...

    AngularJs的UI组件ui-Bootstrap

    UI-Bootstrap是AngularJs团队在Bootstrap基础上,用AngularJs实现的一组UI控件,包括Tab页,手风琴,下拉菜单,模态窗口,日期选择等等。原生的这些控件在Bootstrap里是用Jquery写的,用了UI-Bootstrap就可以抛开...

    ajax tab(js)

    在实际应用中,Ajax Tab的实现方式多种多样,可以使用现成的JavaScript库或框架,如jQuery UI、Bootstrap、AngularJS等,它们提供了成熟的Tab组件和Ajax功能。当然,也可以从零开始编写自定义的解决方案,这需要对...

Global site tag (gtag.js) - Google Analytics