2012-10-13 23 views
5

我定義在App.run某些型號低於我控制器someCtrl內覆蓋:

App.run(['$rootScope', function($rootScope) { 
    $rootScope.attempt = 1; 
}); 

function someCtrl($scope, $rootScope) { 
    $rootScope.attempt = 2; 

    $rootScope.checkAttempt = function() { 
    return $rootScope.attempt > 1 ? true : false;  
    }; 
} 

還有就是對網頁上的按鈕出來的someCtrl's範圍:

<button class='btn' ng-disabled="checkAttempt()">Who's changing my value?</button> 

僅供參考,我'知道創建一個服務或使用發射廣播機制來跨控制器共享數據,但我想知道如何驗證是否將$ rootScope注入控制器?

回答

10

恕我直言,我認爲它很好,將$rootScope注入控制器。我會建議使用發射/廣播。

+0

有關使用rootScope的一件事是您可以向下廣播到所有子範圍。還有一點需要注意的是,在使用範圍時,最佳做法是不直接附加到範圍上,即在範圍上創建對象,所以$ rootScope.my = {attempt:1}。這是雙向數據綁定的關鍵,你不太容易失去綁定。 –

7

您不需要將$ rootScope注入控制器。當您注入$ scope時,由於範圍繼承,您可以自動訪問$ rootScope中定義的任何內容。見documentation。向下滾動到範圍層次結構部分。

1

那麼,將$rootScope注入到控制器,服務或指令中並沒有什麼壞處,但是您試圖弄清楚它是否真的有必要。原因是綁定到$rootScope的任何方法或屬性都會使其成爲全局的,除非手動清理並且創建全局變量創建的所有這些問題,否則不會被GC化。

跨多個控制器共享數據的最佳方式是使用服務。

相關問題