麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > JavaScript > 正文

angularjs之$timeout指令詳解

2019-11-19 16:20:51
字體:
來源:轉載
供稿:網友

angular.js的$timeout指令對window.setTimeout做了一個封裝,它的返回值是一個promise對象.當定義的時間到了以后,這個promise對象就會被resolve,回調函數就會被執行.

如果需要取消一個timeout,調用$timeout.cancel(promise)方法.

用法:

$timeout(fn, [delay], [invokeApply]);

fn: 回調函數(必填)

delay: number類型.延遲的時間(非必填),如果不填,表示等線程空下來以后就執行.比如當頁面被渲染完成后.

invokeApply: 布爾值.是否需要進行臟值檢測(非必填),不填默認為false,如果設置為true,則fn回調會被包在$scope.$apply()中執行

返回值: 返回一個promise對象.當定義的時間到了以后,這個promise對象就會被resolve.resolve的值就是fn回調函數的返回值

方法:

$timeout.cancel([promise])

promise: 一個由$timeout()所創建的promise對象.(非必填).調用cancel()以后,這個promise對象就會被reject.

返回值: 如果$timeout()的回調還沒有被執行,那就取消成功.返回true

下面來簡單的測試一下:

   var timeoutApp = angular.module('timeoutApp',[]);   timeoutApp.run(function($timeout){     var a = $timeout(function(){       console.log('執行$timeout回調');       return 'angular'     },1000);     a.then(function(data){       console.log(data)     },function(data){       console.log(data)     });     //$timeout.cancel(a);   })

運行以后看到控制臺打印:

執行$timeout回調
angular

如果我打開注釋,執行.cancel()方法,那么$timeout的回調就不會被執行,它返回的promise被reject,控制臺打印:

canceled

下面做個很實用的小demo: 延遲下拉菜單: 鼠標放到button上的時候,延遲500毫秒顯示下拉菜單,當鼠標離開button的時候,延遲500毫秒隱藏下拉菜單,如果鼠標是進入了下拉菜單部分,那么就不隱藏下拉菜單.如果鼠標離開了下拉菜單,延遲500毫秒隱藏下拉菜單,如果鼠標是進入了button,那么還是不隱藏下拉菜單

html:

<!DOCTYPE html><html ng-app="timeoutApp"><head>  <title>$timeout服務</title>  <meta charset="utf-8">  <link rel="stylesheet" href="../bootstrap.css" rel="external nofollow" />  <script src="../angular.js"></script>  <script src="script.js"></script>  <style type="text/css">  * {   font-family:'MICROSOFT YAHEI'  }  </style></head><body > <div ng-controller="myCtrl">   <div class="dropdown" dropdown >     <button class="btn btn-default dropdown-toggle" type="button" ng-mouseenter = "showMenu()" ng-mouseleave = "hideMenu()">       Dropdown       <span class="caret"></span>     </button>     <ul class="dropdown-menu" ng-show="ifShowMenu" ng-mouseenter = "showMenu()" ng-mouseleave = "hideMenu()">       <li><a href="#" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >Action</a></li>       <li><a href="#" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >Another action</a></li>       <li><a href="#" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >Something else here</a></li>       <li><a href="#" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >Separated link</a></li>     </ul>   </div> </div></body></html>

js: 

var timeoutApp = angular.module('timeoutApp',[]);timeoutApp.controller('myCtrl',function($scope){  $scope.ifShowMenu = false;});timeoutApp.directive('dropdown',function($timeout){  return {    restrict:"EA",    link:function(scope,iele,iattr){      scope.showMenu = function(){        $timeout.cancel(scope.t2);        scope.t1 = $timeout(function(){          scope.ifShowMenu = true        },500)      };      scope.hideMenu = function(){        $timeout.cancel(scope.t1);        scope.t2 = $timeout(function(){          scope.ifShowMenu = false        },500)      };    }  }})

代碼應該很好理解: 就是進入button和進入ul下拉菜單的時候,都定義一個timeout回調(過500毫秒以后顯示下拉菜單),同時取消隱藏下拉菜單的回調.而離開button和ul的時候相反.

代碼地址: https://github.com/OOP-Code-Bunny/angular/tree/master/%24timeout

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 国产久草视频在线 | 七首小情歌泰剧在线播放 | 亚洲一二区视频 | 免费性爱视频 | 91一区二区三区久久久久国产乱 | 深夜视频在线观看 | 久久国产精品久久久久久 | 久久精热 | 久久国产乱子伦精品 | 久色乳综合思思在线视频 | 成人男女啪啪免费观看网站四虎 | 国产91丝袜在线播放 | 蜜桃精品视频在线观看 | 免费毛片视频 | 热99热| 91久久久久久亚洲精品禁果 | 特级a欧美做爰片毛片 | 中文字幕www | 国产一区二区免费在线观看视频 | 九九热视频在线免费观看 | 黄色毛片一级 | 欧美一级做性受免费大片免费 | 久久91精品 | 精品一区二区三区在线观看视频 | 欧美日韩网站在线观看 | 久久精品a一级国产免视看成人 | 亚洲特黄| av成人在线播放 | 亚洲第一成人在线视频 | 国产精品爱久久久久久久 | 午夜视频你懂的 | 国产99视频在线观看 | videos真实高潮xxxx| 性欧美大战久久久久久久免费观看 | 一级黄色免费观看 | 国产成人免费精品 | 男女羞羞视频在线免费观看 | 狠狠操精品视频 | 免费观看黄视频 | 一级α片免费看刺激高潮视频 | 亚洲国产网站 |