我刚刚得到我的指令,拉入一个模板,像这样附加到它的元素:
# 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 数据传递给 dataTable ()调用以提供表数据,或者您可以将数据放在页面上,它将完成其余的工作。.我正在做后者,在 HTML 页面上已经有了行。
但问题是,我必须调用表 # line _ item AFTER DOM 上的 dataTable ()。我上面的指令在模板被附加到指令的元素之前调用 dataTable ()方法。有没有一种方法可以在追加之后调用函数?
谢谢你的帮助!
安迪回答后更新1:
我想确保 link 方法只有在所有内容都在页面上之后才会被调用,所以我修改了一个小测试的指令:
# 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 数据表
.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') %>"
}
这很有效,所以我想知道非计时器版本的代码出了什么问题?