2016-04-25 106 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的服务错误。

它返回一个承诺,因此倾向于与其他基于承诺的代码相比,传统的回调方法更好地互操作。当您的回调返回时,返回的值用于解决承诺。

相关问题