есть ли обратный вызов пост рендера для Angular JS?

Я только что получил мою директиву, чтобы получить шаблон для добавления к его элементу, например так:

# 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>

Я также использую плагин jQuery под названием DataTables. Его общее использование выглядит следующим образом: $ ('table # some_id'). DataTable (). Вы можете передать данные JSON в вызов dataTable () для предоставления данных таблицы ИЛИ у вас могут быть данные уже на странице, и они будут делать все остальное. Я делаю последнее, когда строки уже находятся на странице HTML. ,

Но проблема в том, что я должен вызвать dataTable () в таблице # line_items ПОСЛЕ ТОГО, КАК DOM готов. Моя директива выше вызывает метод 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.

Затем я пробую свой вызов jquery datatable

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

И это работает. Так что мне интересно, что не так в нережимной версии кода?

Ответы на вопрос(10)

Ваш ответ на вопрос