讓我們假設一個頁面左邊的面板有一些可供選擇的項目,而右邊有一個「購物車」面板,那麼最好是有兩個控制器:1個用於左側面板,右側1個右側面板?實際上,爲了共享數據並能夠使用來自兩個控制器的數據,我們可以爲左側面板設置<div>
,然後立即爲「購物車」(嵌套2個控制器)啓動另一個<div>
,以便我們可以「混合和匹配」itemController.foo
和cartController.bar
(使用「controller as」語法)。在AngularJS中,我們如何決定擁有一個或多個控制器?
但是在JavaScript代碼中,如果我們需要共享數據,則需要有工廠服務或使用$rootScope.sharedData
對象。那麼,爲什麼不使用1個控制器而不是2個,這樣數據共享就不成問題了?但是,假設我們使用2個控制器,如果用戶是「公司協調員」,那麼在頁面中有一個特殊情況,以便他或她每週可以進行多次採購(而不是一般用戶每週限制1次採購),所以我們需要在頁面中進行一些特殊處理,我們是否應該實際創建另一個名爲CompanyCoordinatorController
的控制器?
O'Reilly的書AngularJS Up and Running,2014,在頁面上說。 18:
AngularJS控制器幾乎總是直接鏈接到視圖或HTML。我們永遠不會有一個不在UI中使用的控制器(這種業務邏輯進入服務)。
所以它似乎有意義有2個控制器?我們可以說,這是頁面上的一個大視圖,因此我們只使用1個控制器?這是否是非模塊化的,而不是堅持「產品清單與購物車的」關注點分離?真正的問題是,我們什麼時候應該在AngularJS頁面中創建一個控制器?
如果該控制器或視圖的某些部分可以在其他地方重新使用,則只有一個控制器才真正是非模塊化的。你甚至沒有提到嵌套控制器,所以問題真的太廣泛了,並且只對自己的答案非常開放 – charlietfl
@charlietfl當我大約35年前第一次開始編程時,事情也是「取決於你如何選擇做它。」然後我在大學的帕斯卡爾上了一堂課,突然之間,他給出了一種「自上而下」的方法,即將工作分成更小的步驟,然後實施這些步驟(作爲程序或功能),如果任務太大,也要分解它。而且每個程序或函數都有自己的範圍,並且儘量不要使用全局... [續] –
...事情變得清晰。我認爲AngularJS可能有這樣的方法,或者一個經驗豐富的AngualrJS人可以告訴你一個方法,「作爲一種最佳實踐,它可以這樣做......」 –