2017-11-03 3 views
-1

모듈의 Providers 섹션에있는 AppModule에 제공되고 AppComponent에서 구독하는 SharedServices 모듈의 일부로 BehaviorSubject가 있습니다. 또한 다른 모듈 AdminModule의 일부인 다른 구성 요소에 가입하지만 AppComponent의 Providers 섹션에 추가하지 않으면 변경 사항이 적용되지 않습니다. 왜 이런거야? 모듈의 제공자 섹션에 추가하고 모든 구독자가 변경 사항을 수신하면 구독 할 수 있을까요?Angular 4 Shared Service Observable Behavior Subject

변경 사항을 적용하려면 하위 구성 요소에 대해이 작업을 수행해야합니다. 나는 이것으로 정말로 혼란 스럽다.

@Component({ 
    selector: 'app-root', 
    templateUrl: './app.component.html', 
    styleUrls: ['./app.component.scss'], 
    providers : [ AppsSharedService] <-------- 
+3

그건 내가 예상했던 것과는 정반대입니다. 여러분이 컴포넌트 레벨 제공자에서 선언한다면 더 많은 * 인스턴스를 가지게 될 것입니다. 제발 [mcve]를주세요. – jonrsharpe

답변

3

당신은 각 문서의 지침을 따라하고 "공유"모듈에서와 "핵심"모듈에이 글로벌 기업을 이동할 수 있습니다

https://angular.io/guide/ngmodule#no-shared-module-providers

나는 무슨 일이 용의자 여기서 일어나는 것은 서비스가 두 번 만들어지기 때문에 하나에서 발생하는 변경 사항이 모두에 반영되지 않습니다.

+0

그래,하지만 AppModule과 AdminModule을 가지고 있기 때문에 AppModule과 AdminModule이 모두이를 참조 할 수 있도록 SharedService 모듈이 있습니다. 내가 AppModule에만 추가하면 AdminModule에서 참조 할 수 없지만 내 질문은 BehaviorSubject Subscription에 있습니다. BehaviorSubject에 가입하면 모든 구독자에게 게시되지 않습니다. 하나의 인스턴스가 있어야하며 싱글 톤을 AppComponent에 선언해야합니까 ?? AdminModule도 지연로드됩니다. 나는 정말로 혼란 스럽다. – Fab

+0

제가 링크 된 문서, 특히이 섹션을 읽으십시오 : https://angular.io/guide/ngmodule#why-bother. 제공자 (BehaviorSubject가있는 서비스)를 사용하는 위치와 제공되는 방법에 큰 차이가 있습니다. 서비스 자체를 구성 요소로 가져올 수는 있지만 요청하는 동작을 얻으려면 한 번만 제공해야합니다. –

+0

질문에 대한 원래의 의견에서 제안했듯이, 여러분이 언급 한 실패를 보여주는 간단한 코드 예제를 만드는 것이 도움이 될 수 있습니다. 그로부터 수정 사항을 쉽게 식별 할 수 있어야합니다 ... 간단한 예제를 작성하여 해결할 수도 있습니다. –