¿Hay una devolución de llamada de procesamiento posterior para la directiva Angular JS?

Acabo de recibir mi directiva para introducir una plantilla para adjuntarla a su elemento como este:

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

También estoy usando un complemento jQuery llamado DataTables. El uso general de esto es así: $ ('table # some_id'). DataTable (). Puede pasar los datos JSON a la llamada dataTable () para suministrar los datos de la tabla O puede tener los datos ya en la página y hará el resto. Estoy haciendo lo último, con las filas ya en la página HTML. .

Pero el problema es que tengo que llamar a dataTable () en la tabla # line_items DESPUÉS de que DOM esté listo. Mi directiva anterior llama al método dataTable () ANTES de que la plantilla se agregue al elemento de la directiva. ¿Hay alguna forma en que pueda llamar a las funciones DESPUÉS del anexo?

¡Gracias por tu ayuda!

ACTUALIZACIÓN 1 después de la respuesta de Andy:

Quiero asegurarme de que el método de enlace solo se llame DESPUÉS de que todo esté en la página, así que modifiqué la directiva para una pequeña prueba:

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

    }

Y de hecho veo "boo" en el div # sayboo.

Entonces trato mi llamada 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') %>"
    }

No hay suerte

Entonces trato de añadir un tiempo de espera:

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

Y eso funciona. Así que me pregunto qué va mal en la versión sin temporizador del código.

Respuestas a la pregunta(10)

Su respuesta a la pregunta