加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

angularjs – 有一个后渲染回调的Angular JS指令?

发布时间:2020-12-17 09:13:07 所属栏目:安全 来源:网络整理
导读:我刚刚得到了我的指令拉入一个模板,以附加到它的元素,像这样: # CoffeeScript.directive 'dashboardTable',- controller: lineItemIndexCtrl templateUrl: "%= asset_path('angular/templates/line_items/dashboard_rows.html') %" (scope,element,attrs)
我刚刚得到了我的指令拉入一个模板,以附加到它的元素,像这样:
# 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页面上的行。

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

感谢您的帮助!

更新1后Andy的答案:

我想确保链接方法只有在一切都在页面上后被调用,所以我改变了指令进行一点测试:

# CoffeeScript
#angular.module(...)
.directive 'dashboardTable',->
    {
      link: (scope,attrs) -> 
        console.log 'Just to make sure this gets run'
        element.find('#sayboo').html('boo')

      controller: lineItemIndexCtrl
      template: "<div id='sayboo'></div>"

    }

我确实看到“boo”在div#sayboo。

然后我尝试我的jquery datatable调用

.directive 'dashboardTable',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,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
});

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读