2014-10-28 23 views
1

我有幾個關於Angular的問題,如果有人爲我清除它,我會非常感激。

  1. 我知道如何在角在控制器和指令的情況下作用域的工作,但他們什麼時候破壞($銷燬被觸發時)我很困惑。如果有人能夠對Angular中的示波器的生命週期有所瞭解,那就太好了。

  2. 假設我有一堆控制器和指令在我的應用程序。當它們中的每一個被加載並卸載到存儲器中時。有人能告訴我更多關於控制器和指令的生命週期嗎?

問候。

回答

0

當用AngularJS編譯器($compile)編譯的DOM元素被銷燬時,emi ts $ destroy事件,可用於刪除指令或控制器,某些觀察者或事件偵聽器,這些事件可能導致內存泄漏。

當範圍被破壞?

例如,當您使用ngRoute更改路線時,您使用的控制器的範圍被破壞,並根據下一個路線控制器加載新的$scope

當$範圍被破壞的另一個例子是ngRepeat這破壞了剩餘的項目:

// remove leftover items 
for (var blockKey in lastBlockMap) { 
    block = lastBlockMap[blockKey]; 
    elementsToRemove = getBlockNodes(block.clone); 
    $animate.leave(elementsToRemove); 
    if (elementsToRemove[0].parentNode) { 
     // if the element was not removed yet because of pending animation, mark it as deleted 
     // so that we can ignore it later 
     for (index = 0, length = elementsToRemove.length; index < length; index++) { 
      elementsToRemove[index][NG_REMOVED] = true; 
     } 
    } 
    block.scope.$destroy(); 
} 

我怎麼能摧毀一個$scope由我自己?

使用$scope.$destroy();

當$範圍被破壞,會發生什麼?

的角發射$destroy廣播事件,在這之後:禁用聽衆,觀察者和施加/消化該範圍的方法,以及然後執行默認$destroy事件偵聽器作爲破壞這標誌着範圍。