2013-04-08 107 views
4

當ng-repeat完成更新時,我遇到了一些AngularJS引發指令的麻煩。我有三個命名數組,通過三個鏈接切換到允許所選數組以ng-repeat顯示。我想在完成時解開一些代碼,因爲我打算爲D3設置一些元素屬性以供使用。ngRepeat更新後的指令

我試過在我的指令中檢查scope。$ last,但是在每個ng-repeat過程結束時都沒有調用它。如果某些數據保持不變,則可能不會將作用域$。last設置爲true。

http://plnkr.co/edit/hwmOlI6YrgS4H1C1h7k2?p=preview

那麼,什麼時候NG-重複已經完成的指令觸發代碼的最佳方式?

+0

該指令的用途是?你能用指令更新plunk嗎?我知道它需要進入ng-repeat。如果你可以用指令更新plunk,它可以更容易地解決你的問題。 – ganaraj 2013-04-08 14:16:02

+0

用更明顯的名稱更新了plunk,它在li元素中作爲屬性testing =「」在那裏。將其重命名爲testdirective,以便更突出。 – 2013-04-08 14:19:08

+0

對不起,dint看到了,我的壞:) – ganaraj 2013-04-08 14:31:24

回答

10

以下是您的解決方案。請注意,每次最後一次觸發。

http://plnkr.co/edit/xV1quqzorzxliS2shrP4?p=preview

你只需要$watch的$ last變量,它會正常工作。這有助於在未創建scope但僅更新了新值的情況下。您的指令會被創建一次,如果其中一個重複變量只是更改值ng-repeat可以優化並更新值(而不是刪除所有值並重新創建新值)。在這種情況下,$scope.$last將是一個更新的變量,而不是被「創建」的東西。所以,你需要$watch吧。

+0

工作,謝謝:)我唯一的問題是,有時D3是抓住一個數據屬性,它仍然有{{data.changerate}}而不是值(如20) 。大部分時間,儘管它已被解析並且返回值。有什麼想法嗎? – 2013-04-08 14:47:50

+0

我不完全確定你在哪裏以及在哪種情況下嘗試這樣做,但是如果你正在做

然後你可以通過attrs獲得該屬性的值$ observe(data-someattrib,function(newValue) { }); – ganaraj 2013-04-08 14:52:24

+0

就是這樣的。退房http://plnkr.co/edit/aSXs6mGgQmvpGCL1i1IZ我console.log'ed數據D3結束返回。如果從頁面「one」切換到「two」,則會從某些條目中看到數組中的{{reference [id] .count}}。不知道如何將觀察與d3結合起來。 – 2013-04-08 15:18:16