2014-10-03 2 views
0

저는 같은 종류의 질문을 여러 번 묻습니다.하지만 제 요구 사항에 맞는 정확한 질문을 찾을 수 없습니다.

showPNG = function() { 
     var pngPromise = $modal({ 
      template: 'index.html', 
      persist: true, 
      show: false, 
      backdrop: 'static', 
      scope: $scope, 
      modalClass: 'preview-png' 
     }); 
     $q.when(pngPromise).then(
      function(pngElement) { 
       pngElement.modal('show'); 
      } 
     ); 
}; 

나도 같은 기능을 갖는 3 컨트롤러를 가지고 : 나는 내 컨트롤러의 기능이

: 그래서 여기 내 질문입니다. 그래서 나는 그것을 일부 서비스에 쓰여지고 모든 컨트롤러에서 호출 할 수있는 방식으로 리펙토링하려고합니다. 내가 지금까지했던 것은 : 서비스에서

: 컨트롤러에서

var service = module.exports = function ($modal, $q) { 
     return { 
      showPNG : function(scope) { 
       var pngPromise = $modal({ 
        template: 'index.html', 
        persist: true, 
        show: false, 
        backdrop: 'static', 
        scope: scope, 
        modalClass: 'preview-png' 
       }); 
       $q.when(pngPromise).then(
        function(pngElement) { 
         pngElement.modal('show'); 
        } 
       ); 
      } 
     }; 
}; 
service.$inject = ['$modal', '$q']; 

:

... 
    myService.showPNG($scope); 
... 

이 코드는 오류없이 작동합니다. 그러나 문제는 서비스에 인수가 어떤 부작용이라도 인수로 $scope을 전달할 수 있습니까? 이 접근법에 대한 더 나은 대안이 있습니까?

감사합니다.

답변

0

$ scope를 서비스에 전달하지 말 것을 권합니다. 이렇게하면 서비스를 사용중인 컨트롤러에 따라 서비스가 달라집니다. 다른 컨트롤러가 서비스를 사용해야한다면 어떻게 될까요? 대신

는 서비스가 약속을 반환해야하고, 컨트롤러에 다음과 같이 뭔가를 할 :

.controller("ctrl1", ["$scope", "service", function($scope, service){ 
    $scope.showModal = false; 
    service.showPNG() 
     .then(function(shouldShow){ 
     $scope.showModal = shouldShow; 
     $scope.$apply(); // assuming showPNG is async 
     }); 
}]); 

편집 : 여기 모달 대화 서비스가 구현 될 수있는 방법의 예 : http://weblogs.asp.net/dwahlin/building-an-angularjs-modal-service

+0

서비스 코드도 제공해 주시겠습니까? – RAS

관련 문제