2015-10-14 189 views
0

我正在使用AngularJS和角度數據庫。 我需要在點擊行時調用模態。 這裏是我的部分代碼:爲什麼我需要使用超時?

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功能正常工作的任何方式,但是調用模式功能工作正常,只有當它包裹在超時。那麼有人可以解釋爲什麼會發生?爲什麼只有第一個功能運作良好我會很感激任何解釋。

+0

是的,它是一種服務,但它不起作用,即使我不會在其中放入任何參數。並且console.log以任何方式與aData一起使用)。用於回覆。 –

回答

0

您需要$timeout的原因是因爲您正在使用帶有角度函數的jQuery事件。這是一個不錯的主意,並且違反角度的設計原則 - 使用ng-click代替。

如果您必須將jQuery和angular混合在一起,那麼請確保通過使jQuery事件的角度感知能夠正確地做到這一點,以便它可以觸發它的摘要循環。

可以觸發摘要在幾個方面,但最簡單的(並且,以你的代碼是做最明顯)是利用$scope.$apply

$scope.$apply(function() { 

    Modal.showModal({ 
    template : 'views/Modal.html', 
    Data : aData 
    }); 

}); 

的原因$timeout作品,是因爲$timeout是(它實際上非常類似於$scope.$apply,但是它不太明顯它在做什麼/爲什麼當你稍後檢查你的代碼時需要它,所以我建議使用$scope.$apply來代替)。

延伸閱讀:ng-book

0

當瀏覽器渲染引擎完成渲染頁面時,沒有回調。

但是渲染頁面是由事件隊列處理的。通過使用$超時功能,您可以將Modal.showModal分配給事件隊列的末端 - 在已經排隊的頁面呈現方法之後。

因此,Modal.showModal將在頁面呈現並正常工作後被調用。

+0

因爲此事件點擊發生,所以並非真正相關。 –

相關問題