2013-06-03 4 views
2

Durandal은 VM에서 호출되고 뷰를 캐싱 할 수있는 메서드를 활성화/비활성화했습니다.Durandal처럼 Angular에서 컨트롤러 상태를 유지합니까?

동일한 기능을 각도로 사용하는 방법이 있습니까?

+0

Durandal과 그 방법에 익숙하지 않은 사람들을 위해 질문을 조금 더 확장 할 수 있습니까? – Stewie

+0

@Stewie - durandal이 경로를 활성화 할 때 일치하는 ViewModel에 호출 된 여러 메소드가있을 것입니다. ViewAttached, Activate 및 Deactivate는 내가 매우 유용하다는 것을 알게 된 몇 가지 예일뿐입니다. 새로운 경로를 탐색 한 후 durandal은 prev를 유지할 수 있습니다. 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

관련 문제