当前位置: 移动技术网 > IT编程>脚本编程>AngularJs > AngularJS标签页tab选项卡切换功能经典实例详解

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

2018年05月29日  | 移动技术网IT编程  | 我要评论

本文实例讲述了angularjs实现标签页tab选项卡功能。分享给大家供大家参考,具体如下:

选项卡一:

javascript+html+css

<!doctype html>
<html>
  <head>
    <meta charset="utf-8">
    <title>www.jb51.net js标签页tab切换</title>
    <style>
      #div1 .active{
        background:blue;
      }
      #div1 div{
        width:200px;
        height:200px;
        background:gray;
        border:1px solid black;
        display:none;
      }
    </style>
    <script>
      window.onload=function (){
        var odiv=document.getelementbyid('div1');
        var abtn=odiv.getelementsbytagname('input');
        var adiv=odiv.getelementsbytagname('div');
        for(var i=0;i<abtn.length;i++){     //遍历div1中的按钮
          abtn[i].index=i;      //给abth[]添加自定义属性
          abtn[i].onclick=function (){
            for(var i=0;i<abtn.length;i++){ //遍历按钮,将class清除
              abtn[i].classname='';
              adiv[i].style.display='none';
            }
            this.classname='active';
            adiv[this.index].style.display='block';
          }
        }
      }
    </script>
  </head>
  <body>
    <div id="div1">
      <input class="active" type="button" value="选项1" />
      <input type="button" value="选项2" />
      <input type="button" value="选项3" />
      <input type="button" value="选项4" />
      <div style="display:block;">111</div>
      <div>222</div>
      <div>333</div>
      <div>444</div>
    </div>
  </body>
</html>

运行效果(直接在上测试运行):

选项卡二:

angularjs指令:

ng-class、ng-click、ng-if

<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>www.jb51.net angularjs标签页tab切换</title>
  <style>
    .active {
      background-color: orange;
    }
  </style>
  <script src="http://apps.bdimg.com/libs/angular.js/1.4.6/angular.min.js"></script>
</head>
<body ng-app="s1.app">
<div>
  <button ng-class="{ 'active' : data.current == 1 }" ng-click="actions.setcurrent(1)">张三</button>
  <button ng-class="{ 'active' : data.current == 2 }" ng-click="actions.setcurrent(2)">李四</button>
  <button ng-class="{ 'active' : data.current == 3 }" ng-click="actions.setcurrent(3)">王五</button>
</div>
<div>
  <div ng-if="data.current == 1">张三的个人信息</div>
  <div ng-if="data.current == 2">李四的个人信息</div>
  <div ng-if="data.current == 3">王五的个人信息</div>
  <script>
    var app = angular.module('s1.app', []);
    app.run(function ($rootscope) {
      $rootscope.data = {
        current: "1" // 1代表张三,2代表李四,3代表王五
      };
      $rootscope.actions =
      {
        setcurrent: function (param) {
          $rootscope.data.current = param;
        }
      }
    })
  </script>
</div>
</body>
</html>

运行效果(直接在上测试运行):

选项卡三:

angularjs 指令:

ng-class、ng-click、ng-show

<!doctype html>
<html ng-app="myapp">
<head lang="en">
  <meta charset="utf-8">
  <title>www.jb51.net angularjs标签页tab切换</title>
  <script src="http://apps.bdimg.com/libs/angular.js/1.4.6/angular.min.js"></script>
</head>
<body>
<section ng-controller="myctrl as panel">
  <ul>
    <li ng-class="{active:panel.isselected(1)}">
      <a href ng-click="panel.selecttab(1)">1111111111</a>
    </li>
    <li ng-class="{active:panel.isselected(2)}">
      <a href ng-click="panel.selecttab(2)">2222222222</a>
    </li>
    <li ng-class="{active:panel.isselected(3)}">
      <a href ng-click="panel.selecttab(3)">33333333333</a>
    </li>
  </ul>
  <!--是否点击-->
  {{panel.isselected(1)}}
  {{panel.isselected(2)}}
  {{panel.isselected(3)}}
  <div class="panel" ng-show="panel.isselected(1)">
    <h1>我是1111111111111111111111</h1>
  </div>
  <div class="panel" ng-show="panel.isselected(2)">
    <h1>我是22222222222222222</h1>
  </div>
  <div class="panel" ng-show="panel.isselected(3)">
    <h1>我是3333333333333333333333</h1>
  </div>
</section>
<script>
  var app = angular.module("myapp", []);
  app.controller("myctrl", function () {
    this.tab = 2;/*设置默认*/
    this.selecttab = function (settab) {/*设置tab点击事件*/
      this.tab = settab;
    };
    this.isselected = function (checkedtab) {/*页面的切换*/
      return this.tab === checkedtab;
    }
  });
</script>
</body>
</html>

运行效果(直接在上测试运行):

选项卡四:

angularjs 指令

第二种和第三种方式来源于下面代码的改进,产生的效果都是一样的。

<!doctype html>
<html ng-app="myapp">
<head lang="en">
  <meta charset="utf-8">
  <title>www.jb51.net angularjs标签页tab切换</title>
  <script src="http://apps.bdimg.com/libs/angular.js/1.4.6/angular.min.js"></script>
</head>
<body>
<section ng-init="tab=3">
  <ul>
    <li ng-class="{active:tab===1}">
      <a href ng-click="tab=1">1111111111</a>
    </li>
    <li ng-class="{active:tab===2}">
      <a href ng-click="tab=2">2222222222</a>
    </li>
    <li ng-class="{active:tab===3}">
      <a href ng-click="tab=3">33333333333</a>
    </li>
  </ul>
  <!--是否点击-->
  {{tab===1}}
  {{tab===2}}
  {{tab===3}}
  <div class="panel" ng-show="tab===1">
    <h1>我是1111111111111111111111</h1>
  </div>
  <div class="panel" ng-show="tab===2">
    <h1>我是22222222222222222</h1>
  </div>
  <div class="panel" ng-if="tab===3">
    <h1>我是3333333333333333333333</h1>
  </div>
</section>
<script>
  var app = angular.module("myapp", []);
  app.controller("myctrl", function () {
  });
</script>
</body>
</html>

运行效果(直接在上测试运行):

但ng-show和ng-if是有区别的

第一点区别是,

ng-if 在后面表达式为 true 的时候才创建这个 dom 节点,
ng-show 是初始时就创建了,用display:blockdisplay:none 来控制显示和不显示。

第二点区别是,

ng-if 会(隐式地)产生新作用域,ng-switchng-include 等会动态创建一块界面的也是如此。

这样会导致,在 ng-if 中用基本变量绑定 ng-model,并在外层 div 中把此 model 绑定给另一个显示区域,内层改变时,外层不会同步改变,因为此时已经是两个变量了。

<p>{{name}}</p>
<div ng-if="true">
  <input type="text" ng-model="name">
</div>

ng-show 不存在此问题,因为它不自带一级作用域。

避免这类问题出现的办法是,始终将页面中的元素绑定到对象的属性(data.x)而不是直接绑定到基本变量(x)上。angularjs中的作用域

参考:

angularjs 常见面试问题

更多关于angularjs相关内容感兴趣的读者可查看本站专题:《angularjs指令操作技巧总结》、《angularjs入门与进阶教程》及《angularjs mvc架构总结

希望本文所述对大家angularjs程序设计有所帮助。

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网