2017-10-12 20 views
0

私は、サービスクラスで動作の件名を作成しました。このサービスをインポートコンポーネントにオブジェクトの動作対象を作成し、それを別のコンポーネントに登録するにはどうすればよいですか?

public personObject: BehaviorSubject<any> = new BehaviorSubject<any>({ 
               personId: 1, 
               name: 'john doe' 
               }); 

、私はこのようなこの動作の対象加入している:

`  this._subscription.add(
      this._bankService.personObject.subscribe(data => { 
       this.personObject = data; 
       console.log(data); 
      }) 
     );` 

をしかし、私は行動の対象に設定された正確なデータを取得することはできませんよ。助けてください。

編集 私はViewContainerRefを使用して兄弟コンポーネントを作成していることを忘れていました。だから私は私の問題についてのコメントが少ない回答を追加しました。

+0

デモを作成できますか? – martin

+0

サービスとコンポーネントクラスについての情報(コード)を追加する –

+0

単純にするため、BehaviorSubjectを使用して兄弟コンポーネント間でオブジェクトを渡したいだけです。それを行う方法に関する情報を提供するデモや記事だけが役に立ちます。ありがとう – Prabesh

答えて

0

コンポーネント

export class DataComponent implements OnInit { 

    public dataList$: Observable<IData[]>; 

    constructor(public dataService: DataService) {} 

    ngOnInit() { 
     this.dataList$ = this.dataService.dataList; 
     this.dataService.getDataList().subscribe(); 
    } 
} 

とあなたのhtmlでそれを使用することができます兄弟コンポーネントを作成すると、それが動作することが判明します。 ViewContainerRefです。

他の賢明な行動オブジェクトは、数字や文字列とまったく同じように動作します。私は今@Inputを使ってコンポーネントにデータを送りました。

0

サービス

@Injectable() 
export class DataService { 

    private _dataListSource: BehaviorSubject<IData[]> = new BehaviorSubject([]); 
    dataList: Observable<IData[]> = this._dataListSource.asObservable().distinctUntilChanged(); 

    ... 

    getDataList(): Observable<any> { 
     return this.httpService.get('/data').map(res => { 
      this._dataListSource.next(res); 
     }); 
    } 

、その後、あなたは私が私がViewContainerRefを使用していた使用していたことを言及するのを忘れ

<div *ngIf="dataList$ | async; let dataList; "> 
     <div *ngFor="let data of dataList"> 
      {{ data | json}} 
     </div> 
    </div> 
関連する問題