7

サービス クラスに動作サブジェクトを作成しました。

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 を使用して兄弟コンポーネントを作成し、いくつかのコメントを付けて回答に追加したことを忘れていました。

4

2 に答える 2

12

サービス

@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);
      });
  }
}

TSファイル

export class DataComponent implements OnInit {

    public dataList$: Observable<IData[]>;

    constructor(public dataService: DataService) {}

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

HTMLファイル

<div *ngIf="dataList$ | async; let dataList; ">
    <div *ngFor="let data of dataList">
        {{ data | json}}
    </div>
</div>
于 2017-10-12T23:21:11.460 に答える