我剛剛得到指令,將模板插入到其元素中,如下所示:# CoffeeScript.directive 'dashboardTable', -> controller: lineItemIndexCtrl templateUrl: "<%= asset_path('angular/templates/line_items/dashboard_rows.html') %>" (scope, element, attrs) -> element.parent('table#line_items').dataTable() console.log 'Just to make sure this is run'# HTML<table id="line_items"> <tbody dashboard-table> </tbody></table>我還使用了一個名為DataTables的jQuery插件。它的一般用法是這樣的:$('table#some_id')。dataTable()。您可以將JSON數(shù)據(jù)傳遞到dataTable()調(diào)用中以提供表數(shù)據(jù),或者可以將數(shù)據(jù)存儲在頁面上,其余的將由數(shù)據(jù)完成。.我正在做后者,HTML頁面上已經(jīng)有行。但是問題是我必須在準(zhǔn)備好DOM之后在table#line_items上調(diào)用dataTable()。我上面的指令在將模板附加到指令的元素之前,先調(diào)用dataTable()方法。有沒有一種方法可以在追加之后調(diào)用函數(shù)?謝謝您的幫助!安迪回答后的更新1:我想確保鏈接方法僅在頁面上所有內(nèi)容之后都被調(diào)用,因此我更改了指令進(jìn)行了一些測試:# CoffeeScript#angular.module(...).directive 'dashboardTable', -> { link: (scope,element,attrs) -> console.log 'Just to make sure this gets run' element.find('#sayboo').html('boo') controller: lineItemIndexCtrl template: "<div id='sayboo'></div>" }我確實在div#sayboo中看到了“ boo”。然后我嘗試我的jQuery數(shù)據(jù)表調(diào)用.directive 'dashboardTable', -> { link: (scope,element,attrs) -> console.log 'Just to make sure this gets run' element.parent('table').dataTable() # NEW LINE controller: lineItemIndexCtrl templateUrl: "<%= asset_path('angular/templates/line_items/dashboard_rows.html') %>" }那里沒有運氣然后我嘗試添加超時:.directive 'dashboardTable', ($timeout) -> { link: (scope,element,attrs) -> console.log 'Just to make sure this gets run' $timeout -> # NEW LINE element.parent('table').dataTable() ,5000 controller: lineItemIndexCtrl templateUrl: "<%= asset_path('angular/templates/line_items/dashboard_rows.html') %>" }那行得通。因此,我想知道非計時器版本的代碼出了什么問題?
3 回答

精慕HU
TA貢獻(xiàn)1845條經(jīng)驗 獲得超8個贊
我遇到了同樣的問題,我相信答案確實是不。請參閱Mi?ko的評論和小組中的一些討論。
Angular可以跟蹤它為操縱DOM而進(jìn)行的所有函數(shù)調(diào)用均已完成,但是由于這些函數(shù)可能會觸發(fā)異步邏輯,這些邏輯在返回后仍會更新DOM,因此我們不希望Angular知道它。任何回調(diào)角度給出了可能有時會工作,但不會是安全的依靠。
與您一樣,我們使用setTimeout啟發(fā)式解決了這一問題。
(請記住,并非所有人都同意我的觀點-您應(yīng)該閱讀上面鏈接上的評論,然后看看您的想法。)
- 3 回答
- 0 關(guān)注
- 821 瀏覽
添加回答
舉報
0/150
提交
取消