2017-10-29 2 views
1

현재 모든 스마트 구성 요소는 각 구성 요소가 요구하는 것과 정확히 일치한다는 원칙에 맞는 자체 apollo.watchQuery, 이 있습니다.GraphQL + 각도 2 서비스

같은 엔티티를 당기는 곳이 3 곳 있지만 각 구성 요소는 약간 다른 것을 원합니다. 그리고 서비스를 만드는 방법을 찾을 수 없습니다.

graphql 엔티티에 대한 서비스를 생성하는 방법이 있습니까?

답변

1

좋은 질문입니다!

GraphQL을 사용하여 클라이언트 측의 로컬 데이터를 관리하는 요점은 구성 요소를 서로 분리하고 REST API를 가져 오는 정기적 인 각도 서비스가 실제로 연결을 생성하는 것입니다.

apollo-client은 공유 작업을 자동으로 처리합니다. 예에서 해당 위치 3 개는 서비스를 공유하지 않더라도 apollo-client은 각 쿼리의 데이터를 표준화하므로 동일한 엔터티 데이터를 공유하고 있음을 의미합니다.

하나의 쿼리가 엔티티의 데이터를 업데이트하면 다른 모든 쿼리는 실행되지 않은 경우에도 업데이트되어야합니다. 그 경우가 아니라면 , 당신은 당신이 잘 dataIdFromObject

그러나 apollo-client 그 쿼리 중 하나가 변경됩니다 경우 즉, 여전히 논리적 디커플링을 유지하는 동안을하고 사용 아폴로 클라이언트를 구성했는지 확인해야한다, 그것은하지 않습니다 다른 2 개의 쿼리에 대해서는 아무 효과가 없습니다.

  1. 가 HOC에 apollo.watchQuery을 넣어합니다 (반작용 세계에서 또한 일반적이다) :

    그래서 당신은 내 의견으로는 구조에 대한 두 가지 선택이있다. 이제 각도 때문에 작품은 소품이 암묵적으로 React를 좋아하는 구성 요소간에 전송되지 않기 때문에 때로는 다소 어색함을 느낍니다.

  2. 은 어쩌면 같은 동일한 이름을 가진 (서로 옆에 구성 요소에 연결하고 폴더에있는 서비스에 apollo.watchQuery을 넣어 -. chat-view.component.ts & chat-view.service.ts

카운터 직관적 보일 수 있습니다인가 Angular 개발자에게는 이것이 최선의 방법이라고 생각합니다. 서비스는 구성 요소에 대한 외부 종속성이지만,이 경우 다른 구성 요소와 공유하지 않으므로 일반 구성 요소처럼 단일 실패 지점을 만들지 않습니다 REST를 사용하는 서비스가 생성됩니다.

중요 참고 - apollo-client 2.0apollo-angular 1.0은 서버에서 REST API를 쿼리하는 경우 (또는 Firebase 또는 다른 프로토콜을 사용하는 경우에도 마찬가지입니다.). 당신은 여전히 ​​사용하여 서버에 정기적으로 REST 호출을 전송하는 동안 모든 혜택을 얻을 수 있도록 클라이언트 응용 프로그램에 Apollo 및 GraphQL을 사용할 수 있습니다 apollo-link-rest