3

我有一個動態div,有條件地推入DOM。我有一個ng-click事件綁定到div中的一個觸發myfunc()的子元素。現在,當div被移除並重新添加到dom時,myfunc()會被觸發兩次。 myfunc被稱爲div被移除和重新添加的次數。看起來我需要解除ng-click,即使在子元素上也是如此。以角度取消綁定動態DOM元素

<div gm-info-window="infoWindow" gm-on-closeclick="infoWindowClosed()"> 
     <div> 
      <b>{{category}}</b> 
      <p>{{subcategory}}</p> 
      <b ng-show="dateString != null"> {{dateString}}</b> 
      <p >{{place}}</p> 
      <a ng-show="hasDescription != false" ng-click="myfunc()">View Description</a> 
     </div> 
</div> 
+0

你如何添加這個充滿活力的div到DOM? – Chandermani

+0

我不直接添加它.. infowindow實際上是由第三方api添加 – mukesh

+0

@Chandermani:我剛剛查過,我每次調用$ compile編譯infowindow的內容,然後將它推入dom.can中,導致問題 – mukesh

回答

0

通過使用$ compile動態插入dom存在內存泄漏的可能性。 現有的dom可以替換爲新的dom元素,而與舊dom關聯的範圍仍然存在,這意味着所有手錶和事件偵聽器仍然存在。

的安全方法是:

  1. 創建我們要動態地插入DOM新的子範圍。
  2. 檢查dom是否要替換現有的。首先銷燬與之相關的現有範圍。
  3. 使用新的子作用域作爲參數編譯新的dom。

事情是這樣的:

var newScope = parentScope.$new(),  //parentScope is the scope you are going to add dom under it 
    $el=$(content); 

if ($el) {        //same dom already exist? 
    var existingScope = $el.scope(); //any scope associated? 

    if (existingScope) { 
      existingScope.$destroy(); 
    } 
} 
$compile(content)(newScope); 

參考文獻:http://roubenmeschian.com/rubo/?p=51 http://makandracards.com/makandra/15851-angularjs-access-the-scope-for-a-rendered-dom-element