gpt4 book ai didi

angularjs - Angular JS 指令有渲染后回调吗?

转载 作者:行者123 更新时间:2023-12-03 04:26:52 25 4
gpt4 key购买 nike

我刚刚收到了拉入模板以附加到其元素的指令,如下所示:

# 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 页面上.

但问题是我必须在 DOM 准备好之后调用 table#line_items 上的 dataTable() 。我上面的指令在将模板附加到指令的元素之前调用 dataTable() 方法。有没有一种方法可以在附加后调用函数?

感谢您的帮助!

安迪回答后更新 1:

我想确保链接方法仅在页面上的所有内容都显示之后才被调用,因此我更改了指令以进行一些测试:

# 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') %>"
}

这有效。所以我想知道非定时器版本的代码出了什么问题?

最佳答案

如果没有提供第二个参数“delay”,则默认行为是在 DOM 完成渲染后执行该函数。因此,不要使用 setTimeout,而是使用 $timeout:

$timeout(function () {
//DOM has finished rendering
});

关于angularjs - Angular JS 指令有渲染后回调吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11125078/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com