<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      金木編程

      公眾號:金木編程

      導(dǎo)航

      Angular JS中$timeout的用法及其與window.setTimeout的區(qū)別

      $timeout的用法

      angular.js的$timeout指令對window.setTimeout做了一個封裝,它的返回值是一個promise對象。當(dāng)定義的時間到了以后,這個promise對象就會被resolve,回調(diào)函數(shù)就會被執(zhí)行。

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

      用法:

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

      fn: 回調(diào)函數(shù)(必填)

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

      invokeApply: 布爾值。是否需要進(jìn)行臟值檢測(非必填),不填默認(rèn)為false,如果設(shè)置為true,則fn回調(diào)會被包在$scope.$apply()中執(zhí)行。

      返回值: 返回一個promise對象。當(dāng)定義的時間到了以后,這個promise對象就會被resolve,resolve的值就是fn回調(diào)函數(shù)的返回值。

      方法:

      $timeout.cancel([promise])

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

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

      下面來簡單的測試一下:

       

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

      運(yùn)行以后看到控制臺打印:

      執(zhí)行$timeout回調(diào)
      angular

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

      canceled

      下面做個很實(shí)用的小demo: 延遲下拉菜單: 鼠標(biāo)放到button上的時候,延遲500毫秒顯示下拉菜單,當(dāng)鼠標(biāo)離開button的時候,延遲500毫秒隱藏下拉菜單,如果鼠標(biāo)是進(jìn)入了下拉菜單部分,那么就不隱藏下拉菜單。如果鼠標(biāo)離開了下拉菜單,延遲500毫秒隱藏下拉菜單,如果鼠標(biāo)是進(jìn)入了button,那么還是不隱藏下拉菜單。

      html:

      <!DOCTYPE html>
      <html ng-app="timeoutApp">
      <head>
          <title>$timeout服務(wù)</title>
          <meta charset="utf-8">
          <link rel="stylesheet" href="../bootstrap.css"/>
          <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="#">Action</a></li>
                    <li><a href="#">Another action</a></li>
                    <li><a href="#">Something else here</a></li>
                    <li><a href="#">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)
                  };
              }
          }
      })

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

       

      Angular中$timeout與window.setTimeout的區(qū)別

      1. 在$timeout中傳入的函數(shù)會被包含在try...catch中,并且在異常時將異常交給$exceptionHandler

      2. window.setTimeout返回的是數(shù)字id,可以通過window.clearTimeout(id)取消,而$timeout返回的是promise對象,要取消要用$timeout.cancel(返回的promise對象)。

      3. $timeout傳入的function會更新作用域內(nèi)的數(shù)據(jù)綁定,也就是說在function中對$scope的修改會觸發(fā)更新,而window.setTimeout中對$scope的修改不會觸發(fā)更新。當(dāng)然$timeout有第三個參數(shù),默認(rèn)為true,如果傳入false,則不會更新當(dāng)前作用域的數(shù)據(jù)綁定。

      posted on 2016-08-02 15:23  金木雜談  閱讀(6447)  評論(0)    收藏  舉報(bào)

      主站蜘蛛池模板: 国产精品成人va在线播放| 国产精品美女久久久| 久久久精品2019中文字幕之3| 久久99精品久久久久久| 97色成人综合网站| 昭平县| 亚洲国产精品日韩av专区| 94人妻少妇偷人精品| 亚洲中文字幕精品无人区| 最新中文字幕国产精品| 公喝错春药让我高潮| 日本一区二区三本视频在线观看| 国产精品高清中文字幕| 内射极品少妇xxxxxhd| 国产精品免费无遮挡无码永久视频 | 国产精品老熟女乱一区二区| 大香伊蕉在人线国产最新2005| 久久国产成人精品av| 亚洲区日韩精品中文字幕| 特级毛片在线大全免费播放| 亚洲AV美女在线播放啊| 国产成人无码一区二区三区在线| 布尔津县| 永久天堂网 av手机版| 亚洲国产日韩欧美一区二区三区| 丰满少妇内射一区| 欧美一区二区三区成人久久片| 67194熟妇在线直接进入| 在线高清免费不卡全码| 国产一区二区三区不卡视频| 狠狠噜天天噜日日噜视频麻豆| av在线播放国产一区| 亚洲精品久荜中文字幕| 强开小雪的嫩苞又嫩又紧| a级国产乱理伦片在线观看al| 一区二区三区日本久久九| 中文字幕在线精品视频入口一区| 精品一区二区三区在线观看l| 色综合 图片区 小说区| 偷拍精品一区二区三区| 欧美性xxxxx极品|