현재 범위를 AngularJS 서비스에 전달



Answers

당신의 기능이 당신이 서비스를 필요로하지 않는 것보다 하나의 컨트롤러에만 국한되어 있다고 말할 수 있습니다.

컨트롤러 작업은 특정 모델을 조작하는 반면 서비스는 글로벌 작업을 처리해야합니다. 나는 오히려 것들을 혼합하는 대신에이 패러다임에 충실하고자한다.

이것이 문서가 말하는 것입니다.

서비스

각도 서비스는 웹 앱과 관련된 특정 작업을 수행하는 싱글 톤입니다.

제어 장치

Angular에서 컨트롤러는 루트 범위를 제외한 각도 범위 인스턴스를 보완하는 데 사용되는 JavaScript 함수 (형식 / 클래스)입니다.

추신 : 당신이 소화 할 필요가 있다면 당신은 또한 당신의 서비스 내에 $ rootScope를 삽입 할 수 있습니다.

Question

AngularJS 서비스에 "현재" $scope 를 전달하는 것이 맞습니까?

나는 $ service가 단지 하나의 컨트롤러에 의해 소비된다는 것을 알고 $ service 메소드 자체에서 컨트롤러의 범위에 대한 참조를 원한다는 것을 알고있다.

철학적으로 정확한가?

아니면 이벤트를 $ rootScope에 브로드 캐스팅 한 다음 내 컨트롤러에서 듣게하는 것이 좋습니다.




개인적으로 서비스에 $scope 를 넘기는 것은 나쁜 생각입니다 . 컨트롤러가 서비스에 의존하고 컨트롤러의 범위에 따라 서비스가 달라지기 때문입니다.

관계 측면에서 혼란 스러울뿐만 아니라 가비지 컬렉터의 길을 걷는 것과 같은 것들이 있습니다.

내 선호하는 접근 방식은 컨트롤러 범위에 도메인 객체 를 넣고이를 서비스에 전달하는 것이다. 이 방법은 서비스가 컨트롤러 내부에서 사용되는지 아니면 나중에 다른 서비스 내부에서 사용되는지에 관계없이 작동합니다.

예를 들어, 서비스가 배열 errors 에서 요소를 푸시 (push) 및 팝 (pop)하기로되어있는 경우, 다음과 같이 코드가 작성됩니다.

var errors = [];
$scope.errors = errors;
$scope.myService = new MyService(errors);

서비스는 errors 를 처리하여 컨트롤러와 상호 작용 errors . 물론 전체 배열 참조를 닦지 않는 것에 대해 신중해야합니다. 그러나 JS의 일반적인 관심사 인 그날의 끝에서.

나는 imho good OO-practices가 항상 어떤 각도의 마술을 넘어 서기 때문에 방송, $apply 및 / 또는 비슷한 것을 사용하고 싶지 않습니다.




Related