我喜歡Durandal擁有Activate/Deactivate方法,可以在VM上調用,甚至可以緩存視圖。像Durandal一樣在Angular中維護控制器狀態?
有沒有辦法在Angular中使用這個相同的功能?
我喜歡Durandal擁有Activate/Deactivate方法,可以在VM上調用,甚至可以緩存視圖。像Durandal一樣在Angular中維護控制器狀態?
有沒有辦法在Angular中使用這個相同的功能?
您可以使用服務/工廠。這些是AngularJS中的單例,你可以將它們注入控制器。每個控制器嚴格控制一項服務,並在導航到視圖/控制器之間維護該服務。
http://docs.angularjs.org/guide/dev_guide.services.creating_services
這樣的工作的方式,你的控制器將採取myService
作爲注入的依賴。然後您將其分配給$ scope,作爲$scope.cache = myService
。然後在您的視圖中,您綁定到想要緩存的元素的cache.someProperty
。
正如旁白:
可以將包含控制器之間的狀態數據,甚至共享服務。雖然我會建議反對這種模式,因爲它看起來像全球狀態。在控制器之間共享的服務理想情況下應該只提供功能而不是數據對象。除非您專門尋找全球數據存儲:)
對於那些不熟悉Durandal及其方法的人,您能否擴展您的問題? – Stewie
@Stewie - 當durandal激活一個路由時,如果它們存在,匹配的ViewModel將調用幾個方法。 ViewAttached,Activate和Deactivate只是我發現非常有用的其中幾個。在導航到新路線後,durandal可以保持先前。 VM引用處於活動狀態,以便向後導航時VM將不必重新加載其全部狀態。 – Tyler