2014-07-24 3 views
0

그렇다면 일반적인 방법은 아닙니다. 나는 그것이 서비스 나 공장에서 할 수 있다는 것을 알고 있지만 누군가 기본 서비스를 만들고, 그것을 각 컨트롤러에 주입 한 다음, 각 컨트롤러의 기능으로 서비스를 확장하는 것의 장단점을 공유 할 수 있는지 궁금해했다. . 다음 예제와 비슷한 내용이 있습니다.AngularJS, 컨트롤러간에 데이터 공유

app.service('HelperService', function() { 
    return {}; 
}); 

app.controller('Controller1', function($scope, HelperService) { 
    $scope.somefunc = function() { 
     //do stuff here 
    }; 
    HelperService.somefunc = $scope.somefunc; 
}); 

app.controller('Controller2', function($scope, HelperService) { 
    HelperService.somefunc(); 
}); 

이 방법은 효과가 있으며 잘 작동합니다. 나는 이것을 묻는 것에 대해 약간 어리 석음을 느낀다. 그러나 이것이 왜 사용되지 않거나 권장되지 않는지에 관해서 나는 여기서 뭔가를 놓치고있는 것처럼 보인다.

+0

서비스는 싱글 톤이므로 확장 할 수 있습니다. 컨트롤러에 함수 추가 기능이 있으면 지저분 해집니다. 처음에는 함수를 추가하지 않는 것이 어떻습니까? – lucuma

+0

그래, 틀림없이 그것은 지저분해질 수 있고 서비스에서 그 중 일부를 수행하는 것이 더 깨끗합니다. 이런 식으로하는 것이 장단점이 있다면 (난장판을 제외하고) 나는 단지 궁금했다. – dferg

+0

서비스와 그 기능을 호출하는 다른 컨트롤러에 기능을 추가하는 컨트롤러로 더 큰 앱을 유지 보수하려고 생각하십시오. – lucuma

답변

0

서비스는 싱글 톤이며 함수 자체에 new을 호출하면 인스턴스화됩니다. 전달하는 함수는 본질적으로 생성자입니다. 이렇게하면 returning이라는 빈 객체가 어디서나 사용할 수 있지만, 그런 식으로 객체를 반환하려는 경우 .factory을 사용하는 것이 더 바람직하지만 큰 문제는 아닙니다. 인스턴스화해야

  1. Controller1 :

    var HelperService = function() {} 
    var helperService = new HelperService; 
    
    function Controller1() { 
        helperService.someFunc = function() {} 
    } 
    function Controller2() { 
        helperService.someFunc(); 
    } 
    

    내가이 몇 가지 이유를 위해 할 수있는 위험한 일이라고 생각 :

    여하튼, 당신은 개념적으로이 작업을 수행하는 코드를 고려할 수 있습니다 Controller2 전에 그렇지 않으면 에 somefunc을 사용할 수 없습니다. 이상적으로 컨트롤러는 서로에 대해 알지 못합니다.

  2. 서비스 수준 논리와 함께 Controller/ViewModel (범위를 사용하고 있으므로)을 연결하고 있지만 이러한 연결을 해제해야합니다. HelperService은 컨트롤러에 대해서도 알지 못합니다. 대신 컨트롤러에서 사용할 것으로 예상되는 API가있는 서비스를 주입해야합니다. 항상 HelperService 일 필요는 없습니다. 컨트롤러에 HelperService처럼 보이고 API가 변경되지 않아야합니다.

당신이하려는 일에 대해 구체적으로 알지 못해도 조언하기가 어렵습니다. 일반적으로 원하는 것을 재고 할 수 있지만 다른 서비스로 서비스 기능을 확장 할 수 있습니다. 자신의 계층에 서비스가 있다고 생각하십시오.

1

그래도 효과가 있을지는 몰라도 좋습니다. Controller1가 인스턴스화 될 때까지

  • 컨트롤러 2 HelperService.somefunc()가 존재하지 않습니다. 그래서 Controller1
  • HelperService의 코드에 Controller2의 암시 적 의존성이 당신이 그 함수에서 데이터 조작의 일종을하고 있다면
  • 함께 이해 될 수있는 한 장소에서하지 않는 프로그래머, 정말에 운영한다 HelperService로 캡슐화 된 데이터
관련 문제