3

다음 팩토리를 사용하여 API에서 데이터를 가져 와서 apiData라는 로컬 변수에 저장합니다. 그것은 다른 컨트롤러 또는 더 나은 내가 사용하는 로컬 스토리지 또는 cacheFactory 사이의 약속을 공유 할 수있는 좋은 방법AngularJS의 컨트롤러간에 데이터 공유

$routeProvider 
    .when('/myview', { 
     templateUrl: 'views/myview.html', 
     controller: 'MyController', 
     resolve: { 
      queryset: function(MyFactory){ 
       return MyFactory.getApiData(); 
      } 
     } 
    }) 

app.controller('MyController', ['$scope', 'queryset', 
    function ($scope, queryset) { 
     $scope.queryset = queryset; 
    } 
]); 

인가 :

app.factory('MyFactory', function($resource, $q) { 

    var apiData = []; 
    var service = {}; 

    var resource = $resource('http://example.com/api/sampledata/'); 

    service.getApiData=function() { 
     var itemsDefer=$q.defer(); 
     if(apiData.length >0) { 
      itemsDefer.resolve(apiData); 
     } 
     else 
     { 
      resource.query({},function(data) { 
       apiData=data; 
       itemsDefer.resolve(data) 
      }); 
     } 
     return itemsDefer.promise; 
    }; 

    service.add=function(newItem){ 
     if(apiData.length > 0){ 
      apiData.push(newItem); 
     } 
    }; 

    service.remove=function(itemToRemove){ 
     if(apiData.length > 0){ 
      apiData.splice(apiData.indexOf(itemToRemove), 1); 
     } 
    }; 

    return service; 

}); 

나는 내 컨트롤러에 다음과 같은 방법을 apiData을 주입?

공유 변수를 현재 상태로 유지할 수 있도록 MyFactory add() 및 remove() 메소드를 다시 작성하려면 어떻게해야합니까? API 업데이트/생성/삭제 호출이 필요하지 않습니다.

감사합니다.

+0

AngularJS 컨트롤러간에 데이터를 공유 할 수 있지만 공유 데이터는 Ajax 호출에서 가져올 수 있습니다.] (http://stackoverflow.com/questions/15097961/sharing-data-between-angularjs-controller-but-having- the-shared-data-come-from) – rxgx

답변

0

$ resource를 사용하려면 $ resource를 사용해야합니다. 예 : $q.defer() 대신 resource.query().$promise을 사용하여 코드를 정리하십시오. 그렇지 않으면 당신은 잘 가게됩니다. $cacheFactory을 사용할 수 있지만 local var도 사용할 수 있습니다.

현재 상태의 공유 변수가 현재 코드가 아닙니까?

해결 된 값을 하위 컨트롤러에서 사용할 수있는 중첩 된 추상보기 ui-router을 살펴 보는 것이 좋습니다.

관련 문제