2014-04-16 52 views
0

我在angularJS的應用程序,其中追加一些HTML的身體注漿HTML到DOM破壞

document.body.innerHTML += thirdPartyHTML; 

只要做到這一點,好像我ng-click事件榮獲」包括了第三方腳本AngularJS事件t火。第三方腳本的HTML以錯誤的方式追加HTML,還是應該刷新DOM ($scope.$apply)上的AngularJS視圖?

更新:似乎我可以重現錯誤,只需調用document.body.innerHTML + ='';我。它顯然與onclick事件沒有任何關係。如果你有自己的AngularJS應用程序,你可以嘗試調用document.body.innerHTML + ='';在文檔加載之後,並且沒有任何ng-click事件起作用。

+0

找到你確定這是不是也增加了事件處理程序的身體可能解開現有的以不安全的方式?第三方代碼是做什麼的? – tgies

+0

它只是添加一個事件到他們自己的按鈕,像這樣:document.getElementById('my_button')。onclick = function(){...}。它似乎摧毀了我單擊我自己的DOM元素。 – Dofs

回答

1

每當innerHTML被更改,瀏覽器必須重新創建DOM樹。這意味着所有與現有DOM元素相關的信息都將丟失。

這不僅包括事件偵聽器。 Angular在DOM元素上存儲範圍和控制器。所以基本上應用程序已經消失。

如果第三方應用真正改變body元素的innerHTML,那麼你最好讓它前角運行。

作爲替代方案,你可以手動初始化應用程序和不使用ng-app。詳細信息可以在here

+0

讓我們[在聊天中繼續討論](http://chat.stackoverflow.com/rooms/50889/discussion-between-dofs-and-zeroflagl) – Dofs