区别总结如下:
directive中执行的$evalAsync
, 会在angular操作DOM之后,浏览器渲染之前执行。
controller中执行的$evalAsync
, 会在angular操作DOM之前执行,一般不这么用。
而使用$timeout
,会在浏览器渲染之后执行。
以下是测试DEMO:
//创建一个app module
var app = angular.module( "Demo", [] );
//测试 $timeout() 和 $evalAsync() 函数的输出时间顺序
app.directive(
"bnTiming",
function( $timeout ) {
// 本地scope的一个js事件绑定@camnpr
function link( $scope, element, attributes ) {
$timeout(
function() {
console.log( "$timeout 1" );
}
);
$scope.$evalAsync(
function( $scope ) {
console.log( "$evalAsync" );
}
);
$timeout(
function() {
console.log( "$timeout 2" );
}
);
}
// 返回这个指令的配置@camnpr
return({
link: link
});
}
);
输入结果如下:
$evalAsync
$timeout 1
$timeout 2