2014-02-27 3 views
0

여러 개의 컨트롤러가있는 Angular 앱이 있습니다. 나는 사용자가 다른 컨트롤러를 탐색하고 다시 돌아올 때에도 각 컨트롤러가 상태를 유지하기를 원합니다. 기본적으로 사용자가 앱을 완전히 탐색하거나 새로 고침하지 않는 한 사용자가 마지막으로 본대로 각보기를로드해야합니다.

나는 서비스를 사용하는 컨트롤러간에 상태를 공유하는 방법을 알고 있지만 이것은 내가 원하는 것이 아닙니다. 모든 컨트롤러에 대해 새로운 서비스를 만들거나 $rootScope에 모든 것을 넣을 수 있지만 잘못되었습니다.

이렇게하는 것이 바람직한 방법은 무엇입니까?

+0

가능한 경우 : 컨트롤러가 상태를 URL로 복원하는 데 필요한 모든 것을 포함하십시오. – TheHippo

+0

부분적으로 완성 된 양식 및 AJAX 호출에서 반환 된 데이터를 다루므로이 경우 URL을 사용하면 실용적이지 않습니다. – Tamlyn

+0

서비스를 사용하는 것을 꺼리는 이유는 무엇입니까? –

답변

1

나는 지속적인 데이터를 $cookieStore에 저장하고 서비스에 캡슐화하여 쿠키에 대한 인터페이스가 실제로 기억되는 것을 피할 수 있습니다. 예를 들면 다음과 같습니다.

var app = angular.module('app', [ 
    'ngRoute', 
    'ngCookies' 
]); 

app.service('ticketService', function ($cookieStore) { 
    this.getTicket = function() { 
     var ticket = $cookieStore.get('currentTicket'); 
     // Check server for ticket? (additional business logic) 
     return ticket; 
    }; 

    this.setTicket = function (ticket) { 
     // Validate correct ticket? (additional business logic) 
     $cookieStore.set('currentTicket', ticket); 
    }; 
}); 

app.controller('ticketController', function ($scope, ticketService) { 
    var defaultTicket = { 
     name: '', 
     description: '' 
    }; 

    $scope.ticket = ticketService.getTicket() || defaultTicket; 

    $scope.$watch('ticket', function (oldValue, newValue) { 
     if (oldValue === newValue) { return; } 
     ticketService.setTicket(newValue); 
    }); 
}); 
+0

고마워요.하지만 저는 같은 브라우저 페이지 내의 각도보기 사이에서만 페이지를 새로 고침 할 때까지 기다릴 필요가 없습니다. 귀하의 솔루션은 두 가지 모두를 실현하지만 더 단순하거나보다 일반적인 솔루션을 기대했습니다. (+1) – Tamlyn

+0

알겠습니다. 세션 지속성이 필요한 것이 아닌 경우 간단한 서비스가 아마도 당신이 찾고있는 것일 것입니다. 데이터가 여러 소스 (서버, 캐시, 기타 서비스)에서 오는 경우 이러한 서비스를 랩핑하는 것이 가장 좋은 방법 일 것입니다. 컨트롤러 인스턴스화에서'get '만 -'$ scope' 수정에서'set'합니다. –

관련 문제