2016-03-02 26 views
1

讓我們假設一個頁面左邊的面板有一些可供選擇的項目,而右邊有一個「購物車」面板,那麼最好是有兩個控制器:1個用於左側面板,右側1個右側面板?實際上,爲了共享數據並能夠使用來自兩個控制器的數據,我們可以爲左側面板設置<div>,然後立即爲「購物車」(嵌套2個控制器)啓動另一個<div>,以便我們可以「混合和匹配」itemController.foocartController.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頁面中創建一個控制器?

+0

如果該控制器或視圖的某些部分可以在其他地方重新使用,則只有一個控制器才真正是非模塊化的。你甚至沒有提到嵌套控制器,所以問題真的太廣泛了,並且只對自己的答案非常開放 – charlietfl

+0

@charlietfl當我大約35年前第一次開始編程時,事情也是「取決於你如何選擇做它。」然後我在大學的帕斯卡爾上了一堂課,突然之間,他給出了一種「自上而下」的方法,即將工作分成更小的步驟,然後實施這些步驟(作爲程序或功能),如果任務太大,也要分解它。而且每個程序或函數都有自己的範圍,並且儘量不要使用全局... [續] –

+0

...事情變得清晰。我認爲AngularJS可能有這樣的方法,或者一個經驗豐富的AngualrJS人可以告訴你一個方法,「作爲一種最佳實踐,它可以這樣做......」 –

回答

0

這取決於。

說真的,這是一個設計決定,你必須讓自己,你的團隊,以及在你離開後負責維護你的代碼的人。你需要組件是模塊化的嗎?在我看來,你已經對此有了很多想法,但不確定要做出什麼選擇。

這不會有一個正確的答案,並且您在這裏得到的任何答案(包括我的)都是有偏見的,主觀的,並且可能對您無效。我的建議是嘗試一種方法,看看它是否有效。如果不是,則重構它。我個人認爲,我更喜歡通過pub-sub服務相互通信的模塊化組件。但是,再次,這可能不適用於您當前的項目。在做出決定時考慮可行性,成本和可維護性。

乾杯!

相關問題