2014-10-07 2 views
0

내 목표는 두 컨트롤러의 데이터를 교환 할 수 있다는 것입니다. 필자는 서비스를 만들고 다른 컨트롤러에 데이터를 주입 할 수 있다고 들었습니다. 그러나이 ('somethingDetailCtrl') 컨트롤러를 서비스로 변환하는 데 문제가 있습니다./공장 .. 컨트롤러를 컨트롤러로 변환해야합니까?

somethingApp.controller('somethingDetailCtrl', ['$scope', '$routeParams', '$http', 
    function($scope, $routeParams, $http) { 
     $http.get('/assets/javascripts/something/something/' + $routeParams._id +'.json').success(function(data) { 
     $scope.thething = data; 
    }); 
}]); 

사람은 친절하게도 (공장에 그냥 변환 somethingDetailCtrl을)이 안내해 줄하는 것입니다, 나는 각 지식의 가치가 약 2 일이 그래서 어떤 설명을 환영합니다.

+0

죄송합니다. 귀하의 질문에 명확하지 않습니다. 컨트롤러간에 공유하고 싶은 데이터에 대해 더 많은 정보를 공유/설명해 주시겠습니까? – apairet

+0

아, 내 질문에 공장은 제가 목록을 작성하게 만든 공장입니다, 제가 작성한 유일한 공장입니다. 그것보다 위에있는 컨트롤러는 또한 내부가 공장으로 변환 될 필요가 있습니다. 저는이 컨트롤러에 대한 공장을 짓는데 도움이 필요합니다. "somethingsetailctrl"에 문제가 있습니다. 불분명 한 질문에 대해 유감입니다. – Iamsamstimpson

답변

1

angularjs 팩토리는 서비스가 노출하는 모든 데이터와 동작을 가진 객체를 반환하는 함수를 사용하여 새 서비스를 구성합니다. 공장은 싱글 톤입니다. 귀하의 예를 들어 컨트롤러는 HTTP는 GET 노출 찾고 있습니다 우리는 오류 검사에 대해 걱정하지 않은 경우 다음과 같이 작성할 수 있습니다 :

angular.module('something',[]).factory('Something', function($http) { 
    return { 
     getSomething: function(callback) { 
      $http.get('/something').success(function(data, status) { 
       callback(data, status); 
      }) 
     } 
    } 
} 

공장 함수의 인수가 종속 있습니다. 위 예제에서 $ http 만 사용했습니다.

angular.module('something',[]).factory('Something', function($http, $q) { 
    return { 
     getSomething: function() { 
      var deferred = $q.defer(); 
      $http.get('/something').success(function(data, status) { 
       deferred.resolve(data); 
      }); 
      return deferred.promise; 
     } 
    } 
} 

당신은 당신의 컨트롤러에서 위의 중 하나를 소비 할 수 있습니다 : 우리는 다시 우리가이 예제에서 오류 검사를 건너 뛰는 ... $ q를 추가하여 약속을 사용할 수 있습니다. 이 도움이

angular.module('somethingApp').controller('somethingDetailCtrl', function ($scope, Something) { 
    Something.getSomething(function(data) { 
     $scope.thething = data; 
    }); 
} 

희망 : 컨트롤러 함수의 두 번째 인수는 공장에 의해 생성 된 서비스가 어디 최초의 공장 예제를 사용하려면 다음을 수행 할 수 있습니다.

0

제가 알 수있는 한,이 공장은 잘 쓰여져 있습니다. 이제 컨트롤러에 주입하면됩니다.

somethingApp.controller('somethingDetailCtrl', ['$scope', '$routeParams', 'somethingListFactory', 
    function($scope, $routeParams, somethingListFactory) { 
     somethingListFactory.list().then(function(data){ 
      $scope.thething = data; 
     }); 
    }); 
}]); 

편집 : 내가 그렇군요, 당신의 공장에서 아래 부분을 제거 (가 무의미하다) :

.then(
    function(result) { 
      return result.data; 
    }); 
예를 들어, 위의 컨트롤러를 확장하기 위해, 당신처럼 그것을 바꿀 것
+0

나는 공장과 컨트롤러 모두'$ promise' 함수를 가져야한다고 생각한다. BTW, offtopic, 나는 또한 Bosnian (Bihać)이고 연결하고 싶습니다. 아마도 일부 프로젝트에서 공동 작업을 할 수 있습니다. – developer10

+0

두 가지 기능 모두에서 콜백을 원한다면 내 대답을 참조하십시오 http://stackoverflow.com/questions/26242446/angular-pass-deferred-error-from-service-to-controller/26242566#26242566 추신 어떻게 연락하나요? :) – hakazvaka

+0

이메일 : deno.kajda'- @ -'gm-com – developer10

관련 문제