2013-11-22 99 views
5

已經閱讀Angular.js' Controller docs和偶然發現:Angular docs:如何在控制器之間共享無狀態/有狀態代碼?

跨控制器共享無狀態或有狀態碼 - 使用角度 服務來代替。

但是,這讓我不確定。如何在控制器之間共享無狀態/有狀態的代碼?或者「代碼」在這裏意味着什麼?一個模型?此外,據我所知,控制器並不互相引用。任何人都可以爲我(其他人)澄清事情嗎?謝謝。

+0

請參閱這裏http://stackoverflow.com/questions/13180293/angularjs-multiple-uses-of-controller-and-rootscope/13181133#13181133如何使用服務來保持一個狀態(在這種情況下,一個菜單)跨同一個控制器的多個實例(但它也可以是2個或更多不同的控制器)。 –

回答

2

,我認爲他們是指什麼可能的方法之一,「堅持」的數據,控制器之間,或路由變化之間分享。一種方法是將其放入rootScope中,另一種方法是使用服務。如果你定義一個像這樣的服務:

.factory("MyDataObject", function() { 
    return {}; 
}) 

然後MyDataObject將是同一個對象的任何地方你怎麼稱呼它,讓你的東西保存到它以共享數據,功能和控制器之間的國家(或指令,或其他服務等)。

你永遠不知道與角文檔,但我猜這是他們在談論:)

見例如這樣的回答:Angularjs, passing scope between routes

+0

感謝標記爲已接受的答案。自第一次來。但是,看起來它們實際上意味着「數據」共享,而不是「代碼」共享。 –

2

這裏是我的主題視圖。正如角度傢伙一直試圖解釋的,範圍不是你的模型。有角度的「服務」是做到這一點的方法,但字服務是這樣一個超載的術語。從DDD背景來看,我無法將字服務與狀態或狀態協調一致,對我來說這沒有意義。更有意義的是ViewModel或任何你想調用它的東西。由於我使用MVVM模式處理Silverlight,因此我稱之爲ViewModel。由於「控制器」的職責是爲視圖提供範圍,因此我的控制器一直非常精益。大量的邏輯是在ViewModels中,通過控制器創建的$ scope與View相關聯。那有意義嗎?因此,我的控制器可能會取決於mySearchViewModel,邏輯的大部分存在於控制器之間,並可以在控制器之間共享,並將它與一個視圖相關聯,如mySearchController中的$scope.vm = mySearchViewModel

+0

謝謝,它確實有道理。然而,我並不完全同意控制者應該給自己一個觀點 - 我認爲這是一個觀點的責任。因爲視圖始終與控制器相關聯,並且它不會與其不支持的控制器配合使用。同樣,視圖可以只有一個控制器,但控制器可以有不同的視圖。 –

+0

@Makov:我從來沒有說控制器將視圖分配給自己。控制器爲視圖提供了範圍。另外,我會遠離1個與多個視圖關聯的控制器。 – epitka

+0

對不起,我弄錯你了。但是,重用帶有多個視圖的控制器是相當標準的。這就是爲什麼它在第一部分解耦。 –

相關問題