2013-08-05 50 views
1

我有一個指令,它封裝了一個對話框,它幾乎完全與周圍的範圍隔離:與其通信的唯一方式是通過觸發事件。例如,通過單擊按鈕並觸發其他示波器可能正在等待的相應事件,發出諸如「應用」,「保存」,「刪除」或「關閉燈光」等對話框命令。AngularJs:應用範圍從事件發生的變化

由於我們不知道哪些範圍被註冊來處理任何特定的事件,我已經使用從$rootScope一直向上廣播對話的命令事件,當然它的工作原理。但是,如果事件處理程序更改模型,則視圖不會更新,因爲事件觸發後沒有$apply$digest

enter image description here

這裏長眠着我的困境:哪裏打電話$digest而來?還是我對整個事情誤導?

回答

1

由於$broadcast is synchronous,我建議調用$ broadcast的代碼在調用$ broadcast後調用$ rootScope。$ apply(),如果代碼運行在「outside」AngularJS中。 (如果代碼在Angular內部運行,則不需要$ apply()。)

+0

是的,代碼運行在AngularJS的「外部」。鑑於具體情況,您的建議對我來說是最好的選擇。我很擔心調用$ rootScope。$ digest()的權重,但是我會知道它是否會對性能產生負面影響。 – Humberto