2016-04-25 98 views
0

我只是一個初學者,所以不要評價我。

我已經看到很多使用$ timeout函數而沒有任何時間(或時間= 1ms)的angularjs插件(指令/服務)。

例如:

scope.openGallery = function (i) { 
    if (typeof i !== undefined) { 
     scope.index = i; 
     showImage(scope.index); 
    } 
    scope.opened = true; 
    document.body.style.overflow = 'hidden'; 
    /////*******Here*******///// 
    $timeout(function() { 
     var calculatedWidth = calculateThumbsWidth(); 
     scope.thumbs_width = calculatedWidth.width; 
     $thumbnails.css({ width: calculatedWidth.width + 'px' }); 
     $thumbwrapper.css({ width: calculatedWidth.visible_width + 'px' }); 
     smartScroll(scope.index); 
    }); 
}; 

任何具體原因他們這樣做或做它的好處是什麼?

+0

http://stackoverflow.com/questions/20610450/angulajs-angularjs-timeout-without-delay-parameters-reason –

回答

1

它將主要顯示線程的功能顛倒過來(或者,您必須儘量靠近JavaScript中的「線程」)。

如果封裝的功能長時間運行,則表示瀏覽器不會無響應。

0

它在執行回調之前等待當前摘要週期完成。如果爲了使特定的代碼正確工作而需要存在依賴於摘要週期的其他函數的某些副作用,這可能是有用的。例如,假設$timeout()上方的代碼設置變量,該變量由控制器設置爲$watch(),並且控制器執行一些其他邏輯並設置一些變量,並且$timeout()內的代碼需要更新這些變量以用於更新它能正常工作。好角度的開發人員儘量避免這種情況,但無論如何,$timeout()是處理它的最好方法。

0

也許你應該先看看這個答案。 它非常清楚地解釋了$ timeout的功能。

$timeout in angularjs

而且它會自動包裝回調爲你在try/catch塊,並讓您處理在$ exceptionHandler的服務錯誤。

它返回一個承諾,因此傾向於與其他基於承諾的代碼相比,傳統的回調方法更好地互操作。當您的回調返回時,返回的值用於解決承諾。

相關問題