há um retorno de chamada post render para a diretiva Angular JS?
Acabei de receber minha diretiva para inserir um modelo para anexar ao seu elemento da seguinte forma:
# 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>
Eu também estou usando um Plugin jQuery chamado DataTables. O uso geral é assim: $ ('table # some_id'). DataTable (). Você pode passar os dados JSON para a chamada dataTable () para fornecer os dados da tabela OU você pode ter os dados já na página e eles farão o resto .. Eu estou fazendo o último, tendo as linhas já na página HTML .
Mas o problema é que eu tenho que chamar o dataTable () na tabela # line_items APÓS DOM pronto. Minha diretiva acima chama o método dataTable () ANTES de o modelo ser anexado ao elemento da diretiva. Existe uma maneira que eu possa chamar funções após o acréscimo?
Obrigado pela ajuda!
ATUALIZAÇÃO 1 após a resposta de Andy:
Eu quero ter certeza de que o método link só é chamado depois que tudo está na página, então eu alterei a diretiva para um pequeno teste:
# 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>"
}
E eu realmente vejo "boo" no div # sayboo.
Então eu tento minha chamada datatable 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') %>"
}
Sem sorte ai
Então eu tento adicionar um tempo limite:
.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') %>"
}
E isso funciona. Então, eu me pergunto o que está errado na versão sem temporizador do código?