2016-01-28 62 views
0

我的應用程序中有一個內存泄漏,這是因爲元素範圍沒有被銷燬。

用於字段以下:

vm.fields.data.directions = [ 
    { 
    type: 'required-textarea', 
    key: 'step', 
    templateOptions:{ 
     label: 'Directions', 
     placeholder: 'Wrap a bacon piece around each spear; secure ends with a toothpick.' 
    }, 
    expressionProperties: { 
     'link' : function($viewValue, $modelValue, scope){ 
     scope.$on('$destroy', function() { 
      $timeout(function() { 
      console.log(scope); 
      }, 100); 
     }); 
     } 
    } 

此遊戲機出與多個觀察者完全不變一個範圍。對於我的應用程序,我有多個選項卡用於不同的表單域輸入,其中一些包含上述參考字段中的大約20個。每當選項卡導航並再次單擊時,應用程序觀察程序計數將繼續增加,因爲範圍永遠不會被破壞。

爲什麼在銷燬被調用後範圍存在?

回答

0

你的測試邏輯有一個問題:'$ destroy'事件發生時,範圍還沒有被銷燬,所以它會一直出現在你的控制檯日誌中。

docs

一個範圍被破壞就在,一個$破壞事件廣播上 此範圍內。應用程序代碼可以註冊$ destroy事件處理程序 ,這將使其有機會執行任何必要的清理。

您的控制檯日誌代碼觸發的事實表明該範圍實際上已被銷燬。

+0

被銷燬的範圍是真實的;但是所有的觀察者都存在,並且在應用程序的整個生命週期內都不會被刪除。 – byrdr

+0

你是怎麼確定的?您是否嘗試過這個腳本:https://medium.com/@kentcdodds/counting-angularjs-watchers-11c5134dc2ef#.l3h1whyzg –

+0

我添加了一個超時以防萬一。我正在看batarang。觀察者數量增加了與正在銷燬的範圍內安慰的觀察者數量相同的觀察者數量。 – byrdr