为什么我需要使用超时?
Why i need to use timeout?
我正在使用 AngularJS 和 angular-数据表库。
我需要在单击行时调用模式。
这是我的部分代码:
function rowCallback(nRow, aData, iDisplayIndex, iDisplayIndexFull) {
// Unbind first in order to avoid any duplicate handler (see https://github.com/l-lin/angular-datatables/issues/87)
$('td', nRow).unbind('click');
$('td', nRow).bind('click', function() {
console.log(aData.title);
$timeout(function(){
Modal.showModal({
template : 'views/Modal.html',
Data : aData
});
}, 0);
});
return nRow;
}
console.log 函数在任何情况下都可以正常工作,但调用模态函数只有在超时时才会按预期工作。那么有人可以解释为什么会这样吗?为什么只有第一个功能有效?如有任何解释,我将不胜感激。
您需要 $timeout
的原因是因为您正在使用带有 angular 函数的 jQuery 事件。这通常是一个坏主意,并且违反了 angular 的设计原则 - 请改用 ng-click
。
如果您必须将 jQuery 和 angular 混合在一起,请通过让 angular 知道 jQuery 事件来确保您正确地做到这一点,以便它可以触发它摘要循环。
您可以通过几种方式触发摘要,但最简单(并且最明显的是您的代码在做什么)是使用 $scope.$apply
:
$scope.$apply(function () {
Modal.showModal({
template : 'views/Modal.html',
Data : aData
});
});
$timeout
起作用的原因是因为 $timeout
是一个 angular 包装函数,作为其实现的一部分触发摘要循环(它实际上非常类似于 $scope.$apply
,但是当您稍后查看代码时,它在做什么/为什么需要它不太明显,所以我建议改用 $scope.$apply
。
延伸阅读:ng-book.
没有浏览器渲染引擎完成页面渲染的回调。
但是呈现页面是由事件队列处理的。通过使用 $timeout 函数,您将 Modal.showModal 分配给事件队列的 end - 在已经排队的页面呈现方法之后。
因此 Modal.showModal 将在页面呈现并正常工作后调用。
我正在使用 AngularJS 和 angular-数据表库。 我需要在单击行时调用模式。 这是我的部分代码:
function rowCallback(nRow, aData, iDisplayIndex, iDisplayIndexFull) {
// Unbind first in order to avoid any duplicate handler (see https://github.com/l-lin/angular-datatables/issues/87)
$('td', nRow).unbind('click');
$('td', nRow).bind('click', function() {
console.log(aData.title);
$timeout(function(){
Modal.showModal({
template : 'views/Modal.html',
Data : aData
});
}, 0);
});
return nRow;
}
console.log 函数在任何情况下都可以正常工作,但调用模态函数只有在超时时才会按预期工作。那么有人可以解释为什么会这样吗?为什么只有第一个功能有效?如有任何解释,我将不胜感激。
您需要 $timeout
的原因是因为您正在使用带有 angular 函数的 jQuery 事件。这通常是一个坏主意,并且违反了 angular 的设计原则 - 请改用 ng-click
。
如果您必须将 jQuery 和 angular 混合在一起,请通过让 angular 知道 jQuery 事件来确保您正确地做到这一点,以便它可以触发它摘要循环。
您可以通过几种方式触发摘要,但最简单(并且最明显的是您的代码在做什么)是使用 $scope.$apply
:
$scope.$apply(function () {
Modal.showModal({
template : 'views/Modal.html',
Data : aData
});
});
$timeout
起作用的原因是因为 $timeout
是一个 angular 包装函数,作为其实现的一部分触发摘要循环(它实际上非常类似于 $scope.$apply
,但是当您稍后查看代码时,它在做什么/为什么需要它不太明显,所以我建议改用 $scope.$apply
。
延伸阅读:ng-book.
没有浏览器渲染引擎完成页面渲染的回调。
但是呈现页面是由事件队列处理的。通过使用 $timeout 函数,您将 Modal.showModal 分配给事件队列的 end - 在已经排队的页面呈现方法之后。
因此 Modal.showModal 将在页面呈现并正常工作后调用。