2013-06-03 60 views
2

我喜歡Durandal擁有Activate/Deactivate方法,可以在VM上調用,甚至可以緩存視圖。像Durandal一樣在Angular中維護控制器狀態?

有沒有辦法在Angular中使用這個相同的功能?

+0

對於那些不熟悉Durandal及其方法的人,您能否擴展您的問題? – Stewie

+0

@Stewie - 當durandal激活一個路由時,如果它們存在,匹配的ViewModel將調用幾個方法。 ViewAttached,Activate和Deactivate只是我發現非常有用的其中幾個。在導航到新路線後,durandal可以保持先前。 VM引用處於活動狀態,以便向後導航時VM將不必重新加載其全部狀態。 – Tyler

回答

1

您可以使用服務/工廠。這些是AngularJS中的單例,你可以將它們注入控制器。每個控制器嚴格控制一項服務,並在導航到視圖/控制器之間維護該服務。

http://docs.angularjs.org/guide/dev_guide.services.creating_services

這樣的工作的方式,你的控制器將採取myService作爲注入的依賴。然後您將其分配給$ scope,作爲$scope.cache = myService。然後在您的視圖中,您綁定到想要緩存的元素的cache.someProperty

正如旁白:

可以將包含控制器之間的狀態數據,甚至共享服務。雖然我會建議反對這種模式,因爲它看起來像全球狀態。在控制器之間共享的服務理想情況下應該只提供功能而不是數據對象。除非您專門尋找全球數據存儲:)

+0

然後你會推薦什麼方法? – MaxWillmo

+0

@MaxWillmo作出更明確的答案:) – basarat

+0

因此,當我的控制器再次加載時,我將不得不從服務中提取所有保存的狀態,並將其重新分配給$ scope?似乎我應該也許使用$ cacheFactory而不是?在控制器上是否有任何類型的停用,以便我知道何時保存我的狀態? – Tyler