非同期パイプを使用しようとしていますが、データが表示されません。私はサーバーから来ているデータをログに記録しており、コンソールに正常に表示されます。しかし何らかの理由で私は非同期を動作させることができません。角度4非同期パイプが機能していません
shift.service.ts
import { Injectable } from '@angular/core';
import { Shift } from '../shift/shift';
import { HttpClient } from '@angular/common/http';
@Injectable()
export class ShiftService {
constructor(private shift:Shift, private httpClient:HttpClient
) { this.checkShiftStatus();}
checkShiftStatus():Promise<Shift>{
this.httpClient.get<Shift>('http://localhost:8080/shift/isopen')
.subscribe((data) => {
this.shift = data;
console.log(this.shift);
},
error => {
console.error('Something went wrong while trying to check the shift!');
});
return Promise.resolve(this.shift);
}
}
shift.component.ts
import { Component, OnInit } from '@angular/core';
import { Shift } from './shift';
import { ShiftService } from '../services/shift.service';
@Component({
selector: 'app-shift',
templateUrl: './shift.component.html',
styleUrls: ['./shift.component.css']
})
export class ShiftComponent implements OnInit {
isShiftOpen:Promise<boolean>;
shiftLive:Promise<Shift>;
constructor(private shiftService: ShiftService, public shift:Shift) { }
ngOnInit() {
this.isShiftOpen = this.getShift().then(shift => this.shift.active = shift.active);
this.shiftLive = this.shiftService.checkShiftStatus();
}
getShift(){
return this.shiftService.checkShiftStatus().then(shift => this.shift = shift);
}
}
ボタンがさえていても表示されません
<md-grid-list *ngIf="isShiftOpen | async" cols="2" rowHeight="100px">
<md-grid-tile>
<button md-raised-button [disabled]='isShiftOpen' color="primary">Open Shift</button>
<button md-raised-button [disabled]='!isShiftOpen' color="warn">Close Shift</button>
</md-grid-tile>
</md-grid-list>
<md-card class="card">
<md-card-title>
Shift Stats:
</md-card-title>
<md-card-content>
</md-card-content>
</md-card>
<!-- <div *ngIf="(shiftLive | async)?.notnull; else loading"> -->
<div *ngIf="shiftLive | async">
<p> Shift status: {{ shiftLive.active }} </p>
<p> Tickets Sold: {{ shiftLive.totalNumberOfTicketsSold }} </p>
</div>
<ng-template #loading>Loading Data...</ng-template>
shift.component.htmlサービスはtrueの値を提供しています。 divを表示させますが、shiftLive.active、shiftLive.totalNumberOfTicketsSoldの値はありません。
あなたの提案された変更を行い、プログラムを実行しようとしました。しかし、エラーを示すエラーで終了しました。TypeError:Object.devalue(as a updateRenderer)(ShiftComponent.html:18) (Object.debugUpdateRenderer as updateRenderer)で未定義の のプロパティ 'active'を読み取ることができません。 サービスでは、私はthis.httpClient.getを使用しています( 'http:// localhost:8080/shift/isopen');今はこのコードだけです。エラーをキャッチしようとしない。助言がありますか?ありがとう。 –
Saurin
* ngIf = "shiftLive $ | asyncをshiftLiveとして追加した後、divセクションにロードするとうまくいきました。 – Saurin
私があなたを見せた時に一度だけ購読する必要があります。観測可能なストリームを2つの呼び出しに分割する必要はありません。必要なすべての情報が同じコールにあります。 – bryan60