angular - Hur skapar man ett beteendesubjekt för ett objekt och prenumererar på det i en annan komponent?


Jag skapade ett beteendesubjekt i en tjänsteklass.

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

På en komponent som importerar denna tjänst, prenumererade jag på detta beteendesubjekt på detta sätt:

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

Men jag kan inte få exakt dataset i beteendefacket.

Redigera Jag glömde nämna att jag använde ViewContainerRef för att skapa min syskonkomponent som jag lade till i ett svar med några kommentarer.

Svar #1

Service

@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-fil

export class DataComponent implements OnInit {

    public dataList$: Observable<IData[]>;

    constructor(public dataService: DataService) {}

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

HTML-fil

<div *ngIf="dataList$ | async; let dataList; ">
    <div *ngFor="let data of dataList">
        {{ data | json}}
    </div>
</div>

Relaterade artiklar