2017-05-02 3 views
0

나는 현재 3 개의 다른 구성 요소가 있고 그 중 하나가 2 개의 두 구성 요소 사이에서 공유되는 상황에 빠져 있습니다. 두 구성 요소 중 하나에서 공유 구성 요소를 업데이트하면 둘 모두에서 업데이트되도록하고 싶습니다. 할 수있는 방법?2 angular2의 두 브라우저 탭간에 데이터를 어떻게 동기화합니까?

IST 성분

 import {Component,bind,CORE_DIRECTIVES,OnInit} from 'angular2/core'; 
import {MainComponent} from 'src/MainComponent'; 
@Component({ 
    selector: 'my-app', 
    directives:[MainComponent], 
    template: `<h1>AppComponent {{onMain}}</h1> 
    <div *ngIf="onMain == false"> 
     Hello 
     <br> __________________________________<br> 
    </div> 
    <app-share></app-share> 


    }) 

export class FirstComponent implements OnInit {} 

2 성분

  import {Component,bind,CORE_DIRECTIVES} from 'angular2/core'; 
    import {SharedService} from 'src/shared.service'; 
    @Component({ 
     selector: 'sec-app', 

     template: `<app-share></app-share> 
        <button (click)='changeCount()'></button> 
` 
    }) 

    export class SecondComponent { 



     constructor(ss: SharedService) { 
      this.ss = ss; 
     } 

     changeCount() { 
      //want to change the count of shared component and also want a sync in first componen 
     } 
    } 
공유 성분

 import {Component,bind,CORE_DIRECTIVES} from 'angular2/core'; 
@Component({ 
    selector: 'app-share', 

    template: `{{count}}` 
}) 

export class ShareComponent { 

    count:any; 

}

두 가지 구성 요소가 서로 다른 경로에로드됩니다. 예 : 두 개의 탭이있는 브라우저 한 탭에 첫 번째 구성 요소가 있고 두 번째 탭에 두 번째 구성 요소가 있습니다. 두 번째 구성 요소를 업데이트하면 두 구성 요소간에 동기화가 필요합니다. 첫 번째 내용을 반영해야합니다.

+0

무슨 뜻입니까? 그들 사이의 부모 - 자식 관계 란 무엇입니까? –

+0

지금까지 시도한 코드를 공유 하시겠습니까? –

+0

내 질문을 당신이 지금 볼 수있는 코드로 업데이트했습니다. –

답변

0

다른 두 구성 요소의 "공유 구성 요소"를 사용하면 데이터가 아닌 코드 만 공유됩니다. 나는. "공유 구성 요소"의 두 인스턴스가 만들어지며 각 인스턴스에는 고유 한 변수 집합이 있습니다. 따라서 한 구성 요소의 데이터에 대한 업데이트는 다른 구성 요소에 반영되지 않습니다. 이는 의도적으로 설계된 동작입니다.

사이의 데이터를 공유해야하는 경우 두 가지 구성 요소 인 Observables를 사용해야합니다 (). Observable을 선언하여 공유 데이터를 소유하게 될 서비스를 생성해야합니다. 공유 데이터에 액세스해야하는 다른 모든 구성 요소는 서비스 내 관찰 가능 항목을 구독해야합니다.

+0

이 솔루션을 사용해 보았지만 두 가지가 다른 경우 데이터를 공유하지 않습니다. 브라우저의 탭 하나의 탭에서 두 번째 탭으로 데이터를 보내려합니다. –

+0

글쎄, 원래 질문에 "두 개의 브라우저 탭"요구 사항을 언급하지 않았습니다. 당신이 짐작했듯이, 그것은 그 대답을 상당히 변화시킵니다. 다중 탭을 열면 응용 프로그램의 사본이 각 탭마다 하나씩 효과적으로 실행됩니다. 응용 프로그램의 개별 복사본간에 데이터를 공유하는 일반적인 방법은 쿠키 또는 데이터베이스와 같은 타사 데이터 저장소를 사용하는 것입니다. 앱이 데이터베이스 또는 쿠키에 '공유 데이터'를 쓰고 앱에서 공유 데이터를 읽습니다. 그러나 API 레이어에서 백 엔드 코드를 통해 읽고 쓰기를 관리해야합니다. – Aardvark