第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

AngularJS通過指令實(shí)現(xiàn)tabs切換功能

標(biāo)簽:
AngularJS

最近在和同学忙一个创业的项目,博客更新的不是很多,今天下午刚好下雨,就写一个通过指令嵌套实现tabs功能的指令模块,这也是我在一个项目中应用到的。<p>


   442  jdfw.gif

首先先来说一下指令嵌套,指令嵌套顾名思义就是两个以上的指令嵌套在一起,比如下面这样:

<A-deirective>       <B-directive></B-directive>       <C-directive></C-directive> </A-directive>

下面这个tabs功能的指令,刚好用到了这个,可以让代码更加简洁。</br>

<!DOCTYPE html> <html ng-app="docsTabsExample"> <head>   <meta charset="UTF-8">   <title></title>   <script></script>   <script class="lazyload" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB/AAffA0nNPuCLAAAAAElFTkSuQmCC" data-original="lib/angular.min.js" type="text/javascript"></script>   <script class="lazyload" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB/AAffA0nNPuCLAAAAAElFTkSuQmCC" data-original="lib/angular-route.js" type="text/javascript"></script>   <script class="lazyload" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB/AAffA0nNPuCLAAAAAElFTkSuQmCC" data-original="lib/jquery-2.1.4.min.js"></script>   <script class="lazyload" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB/AAffA0nNPuCLAAAAAElFTkSuQmCC" data-original="lib/bootstrap.js" type="text/javascript"></script>   <link rel="stylesheet" href="css/bootstrap.css" type="text/css"/>   <style>     .active{       background: red;     }   </style> </head> <body ng-controller="appCon">   <my-tabs><!--最外层指令-->     <my-pane tittle="ONE"><!--内层指令-->       <h4>One</h4>       <p>angularangularangularangularangularangularangular</p>     </my-pane>     <my-pane tittle="TWO"><!--内层指令-->       <h4>Two</h4>       <p>angularangularangularangularangularangularangular</p>     </my-pane>     <my-pane tittle="THERE"><!--内层指令-->       <h4>There</h4>       <p>bootstrapbootstrapbootstrapbootstrapbootstrapbootstrap</p>     </my-pane>     <my-pane tittle="FIVE"><!--内层指令-->       <h4>five</h4>       <p>jqueryjqueryjqueryjqueryjqueryjqueryjquery</p>     </my-pane>   </my-tabs> </body> <script>     var app=angular.module("docsTabsExample",['template'])             .controller("appCon",["$scope",function($scope){             }])             .directive("myTabs", function () {               return{                 restrict:"EA",                 transclude: true,                 scope:{},                 templateUrl:"myTabs.html",                 controller:["$scope", function ($scope) {//使用controller让最内层指令来继承外层指令,这样内层就可以通过scope的传导,来与外层指令进行数据之间的传递                   var panes = $scope.scopes = [];//                   $scope.select= function (pane) {//实现tabs功能                     angular.forEach(panes, function (scope) { //遍历所有内存指令scope,统一隐藏内容。                       scope.selected=false;                     });                     pane.selected=true;//通过ng-repeat只                   };                   this.addScope= function (scope) {//由内层指令来继承,把内层指令的scope,传到进外层指令进行控制                     if(panes.length===0){                       $scope.select(scope);                     }                     panes.push(scope);//把内层指令数组,传入外层指令scope数组。                   }                 }]               }             })             .directive("myPane", function () {               return{                 restrict:'EA',                 scope:{                   tittle:'@'                 },                 transclude: true,                 require:'^myTabs',//继承外层指令                 templateUrl:"myPane.html",                 link: function (scope, elemenet,attrs,myTabsController) {                   myTabsController.addScope(scope);//把内层指令的scope存入到外层指令中,让外层遍历。                 }               }             });     angular.module("template",[])             .run(["$templateCache", function ($templateCache) {               $templateCache.put("myTabs.html","<div class='table'>" +                       "<ul class='nav nav-tabs'>" +                       "<li ng-repeat='pane in scopes' ng-class='{active:pane.selected}'>" +                          "<a href='#' ng-click='select(pane)'>{{pane.tittle}}<a/>" +                       "</li>" +                       "</ul>" +                       "<div ng-transclude class='tab-content'></div>" +                       "</div>")             }])             .run(["$templateCache", function ($templateCache) {               $templateCache.put("myPane.html","<div class='table-pane' ng-show='selected' ng-transclude>" +                       "</div>")             }]) </script> </html>

整个指令的的实现原理就是通过指令的继承,把内层指令的scope暴露到外层指令中,这样就可以在外层指令控制内层指令的显示。这里还有另外一个要说明的,为了让指令更加有层次,更加有逻辑性,使用了<code>ng-transclude</code>,让指令的template内容,反向插入到标有<code>ng-transclude</code>的内容中。



作者:MakingChoice
链接:https://www.jianshu.com/p/d90d058ec28b


點(diǎn)擊查看更多內(nèi)容
TA 點(diǎn)贊

若覺得本文不錯(cuò),就分享一下吧!

評(píng)論

作者其他優(yōu)質(zhì)文章

正在加載中
  • 推薦
  • 評(píng)論
  • 收藏
  • 共同學(xué)習(xí),寫下你的評(píng)論
感謝您的支持,我會(huì)繼續(xù)努力的~
掃碼打賞,你說多少就多少
贊賞金額會(huì)直接到老師賬戶
支付方式
打開微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊(cè)有機(jī)會(huì)得

100積分直接送

付費(fèi)專欄免費(fèi)學(xué)

大額優(yōu)惠券免費(fèi)領(lǐng)

立即參與 放棄機(jī)會(huì)
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)

舉報(bào)

0/150
提交
取消