2013-08-02 3 views
18

연락처 목록에서 선택한 연락처로 이메일을 보내는보기가있는 앱이 있습니다. 사용자가 "수신자"를 선택하면 검색, 필터링 등의 다른보기/페이지가 표시됩니다. "전자 메일 보내기"및 "연락처 목록"은 ng보기에서로드되는 다른 HTML 부분입니다.각도 UI 라우터로 상태 유지

사용자가 연락처 목록에서 누군가를 선택하면 동일한 양식 (동일한 상태)으로 되돌아 가도록 보내기 양식 상태를 유지해야합니다. 다른 솔루션 ($ rootScope, ng-show를 사용하는 숨겨진 div ...)에 대해 읽었지 만 UI-router가 State Manager와 함께 도움이되는지 알고 싶습니다. 그렇지 않다면 즉시 사용할 수있는 다른 솔루션이 있습니까?

감사합니다.

+0

가능한 중복 [AngularJS와 - 노선 사이에 데이터를 저장] (HTTP :

(function(){ 'use strict'; angular.module('app').service('StateService', function(){ var _states = {}; var _save = function(name, scope, fields){ if(!_states[name]) _states[name] = {}; for(var i=0; i<fields.length; i++){ _states[name][fields[i]] = scope[fields[i]]; } } var _load = function(name, scope, fields){ if(!_states[name]) return scope; for(var i=0; i<fields.length; i++){ if(typeof _states[name][fields[i]] !== 'undefined') scope[fields[i]] = _states[name][fields[i]]; } return scope; } // ===== Return exposed functions ===== // return({ save: _save, load: _load }); }); })(); 

를 사용하려면,이 같은 내 컨트롤러의 말에 일부 코드를 넣어//stackoverflow.com/questions/16802857/angularjs-saving-data-between-routes) –

답변

21

내가 사용한 솔루션은 내 데이터/모델 저장소로 서비스를 사용하고 있습니다. 그들은 컨트롤러 변화에 걸쳐 지속됩니다. 컨트롤러에서 사용

예를

사용자 서비스 (컨트롤러 변경에 걸쳐 계속 우리의 모델)

app.factory('userModel', [function() { 
    return { 
     model: { 
      name: '', 
      email: '' 
     } 
    }; 
}]); 

function userCtrl($scope, userModel) { 
    $scope.user = userModel; 
} 

이의 다른 장점은 재사용 할 수 있다는 것입니다 다른 컨트롤러의 모델도 마찬가지로 easly.

+0

나는 중고 서비스를 사용하지 않았다. 괜찮아 보인다. 그러나 모델이 라우트 매개 변수 (예 : $ routeParams.myId)를 기반으로 작성되면 어떨까요? –

+2

결과를 컨트롤러가 아닌 서비스에 저장합니다. 그 외 모든 것은 동일 할 수 있습니다. – Anton

+2

예제가 불완전한 것처럼 보입니다. 서비스 모델의 변경 사항을 다른 컨트롤러에 [브로드 캐스트] (http://onehungrymind.com/angularjs-communicating-between-controllers/) 할 방법이 필요합니다. [이 예제] (http://stackoverflow.com/a/16559855/168815)도 앱에서 멀리 이동할 때 상태를 저장하는 계정입니다. –

2

Angular-Multi-View이이 시나리오에서 신의 선물이 될 것으로 나타났습니다. 다른보기가 경로를 처리하는 동안 한보기에서 상태를 보존 할 수 있습니다. 또한 여러보기에서 동일한 경로를 처리 할 수 ​​있습니다.

UI-Router에서는이 작업을 수행 할 수 있지만 IMHO가보기 싫어하는보기를 중첩시켜야합니다.

8

권장 사항인지 확실하지 않지만 컨트롤러의 범위에서 속성을 저장 /로드 할 StateService를 만들었습니다. 그것은 다음과 같습니다

angular.module('app').controller('ExampleCtrl', ['$scope', 'StateService', function ($scope, StateService) { 
    $scope.keyword = ''; 
    $scope.people = []; 

    ... 

    var saveStateFields = ['keyword','people']; 
    $scope = StateService.load('ExampleCtrl', $scope, saveStateFields); 
    $scope.$on('$destroy', function() { 
     StateService.save('ExampleCtrl', $scope, saveStateFields); 
    }); 
}]); 
+0

나를위한 가능한 해결책 인 것 같습니다. 이 과정을 통해 입증 된 성공을 거둔 적이 있습니까? 이제 상태를 보존하는 메커니즘을 구현해야합니다. Greets Mario – SQueek

+1

프로덕션 앱에서 사용하지는 않았지만 개발중인 앱에서이 코드를 사용하고 있으며 꽤 잘 작동하는 것 같습니다. –

+0

슈퍼 일 저스틴! 제 동료가 해결책에 만족합니다! 좋은 주말 보내 줘. – SQueek

관련 문제