亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Angular JS指令有后期渲染回調嗎?

Angular JS指令有后期渲染回調嗎?

慕哥6287543 2019-10-25 14:51:40
我剛剛得到指令,將模板插入到其元素中,如下所示:# 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') %>"    }那行得通。因此,我想知道非計時器版本的代碼出了什么問題?
查看完整描述

3 回答

?
精慕HU

TA貢獻1845條經驗 獲得超8個贊

我遇到了同樣的問題,我相信答案確實是不。請參閱Mi?ko的評論和小組中的一些討論。


Angular可以跟蹤它為操縱DOM而進行的所有函數調用均已完成,但是由于這些函數可能會觸發異步邏輯,這些邏輯在返回后仍會更新DOM,因此我們不希望Angular知道它。任何回調角度給出了可能有時會工作,但不會是安全的依靠。


與您一樣,我們使用setTimeout啟發式解決了這一問題。


(請記住,并非所有人都同意我的觀點-您應該閱讀上面鏈接上的評論,然后看看您的想法。)


查看完整回答
反對 回復 2019-10-25
  • 3 回答
  • 0 關注
  • 825 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號