簡體   English   中英

AngularJS GlobalCtrl與$ rootScope vs Service

[英]AngularJS GlobalCtrl vs $rootScope vs Service

我對Angular中的Globals的一些事感到困惑。 下面是我的偽代碼。

1)通過放置GlobalCtrl的方式,我可以從所有控制器中引用我的$ scope.modalOptions。 在這種情況下,我很困惑為什么我看到人們將全局屬性添加到$ rootScope而不是像我在這里一樣添加它們。 這是為了以防萬一他們想把它注入服務或什么?

2)我應該使用服務而不是向GlobalCtrl添加屬性和方法嗎? 如果是這樣,為什么?

<div ng-app="app" ng-controller="GlobalCtrl">
    <div ng-view></div>
</div>

function GlobalCtrl($scope, $location) {
    $scope.modalOptions = {
        backdropFade: true,
        dialogFade: true
    };
}

“主控制器”方法絕對比使用$ rootScope更可取。

范圍繼承是存在的,所以為什么不利用它。 在我看來,該解決方案適用於大多數情況,即除非你需要在某個地方有一個並行控制器(那不是Main的孩子)。 在這種情況下,最好的方法是使用服務並在需要的地方注入。 服務(或者更確切地說是工廠,因為你可能正在使用它 - 在這里閱讀更多關於它們的信息 )是單例,並且可以很好地跨控制器共享數據。

了解范圍很重要

范圍繼承是非常常見的JavaScript繼承。 您應該傾向於為數據使用對象 ,因為它們是通過引用傳遞的。

如果你有一個像$scope.myString = 'is of a primitive data type'; 在您的父控制器中並嘗試覆蓋子控制器中的值,結果將不是您所期望的 - 它將在子控制器上創建一個新字符串,而不是寫入父控制器。

建議在這里閱讀

最后的想法

如果您正在使用嵌套控制器方法,請不要忘記仍在子控制器中注入$scope (和其他依賴項)。 它可能沒有,但它更慢,更難以測試,最后但並非最不重要 - 這是錯誤的方法。

最后,如果您有很多狀態變量來跟蹤和/或使用大量的使用點,那么將它們提取到服務中絕對是個好主意。

一般來說,全局變量被認為是不好的做法,因為它們不鼓勵封裝,使調試變得困難,並促進膨脹的代碼。 以下是對全局變量的一個很好的討論: http//c2.com/cgi/wiki?GlobalVariablesAreBad

一個好的經驗法則是將屬性和方法添加到盡可能最本地的范圍,並使用服務在模塊之間共享數據。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM