我有一個從父組件繼承的子組件。Angular4如何在確認它不是未定義的情況下從父組件變量中分配變量
父組件正在執行api請求並將數據傳遞給子組件。
父組件:
export class ChartComponent implements OnInit {
@Input()
protected exercisesData: any[];
@Input()
protected weightData: any[];
/**
*
*/
constructor(public dataService: DataService) {
}
ngOnInit(): void {
this.dataService.setEndpoint('/api/dashboard/get');
this.get();
}
private get() {
this.dataService
.Get()
.subscribe(data => {
this.exercisesData = Object.assign({}, data);
this.weightData = Object.assign({}, data);
console.log(this.exercisesData);
console.log(this.weightData);
}, (error) => {
console.log(error);
});
}
}
子組件:
export class ExercisesProgressChartComponent extends ChartComponent{
private filterableData: any[];
private dropDownSelectedValue: string;
ngOnInit(): void {
this.dropDownSelectedValue = "0";
this.filterableData = Object.assign({}, this.exercisesData);
}
private onDropDownChange(dropDownSelectedValue) {
if(dropDownSelectedValue == "0"){
this.filterableData = Object.assign({}, this.exercisesData);
}
else{
this.filterableData = Object.assign({}, this.exercisesData);
this.filterableData["exercisesProgress"] = this.filterableData["exercisesProgress"].filter(x=>x.id == dropDownSelectedValue);
}
}
}
子組件的模板:
<div *ngIf="exercisesData" class="dashboard">
<div class="form-group">
<select class="form-control" [(ngModel)]="dropDownSelectedValue" (ngModelChange)="onDropDownChange($event)" sele>
<option [value]="0">All Exercises</option>
<option *ngFor="let x of exercisesData.exercisesProgress" [value]="x.id">{{x.name}}</option>
</select>
<small id="exerciseNameHelp" class="form-text text-muted">Please select exercise for filtering</small>
</div>
{{exercisesData.exercisesProgress | json}}
{{filterableData.exercisesProgress | json}}
<ngx-charts-line-chart
[scheme]="{domain: ['#5AA454', '#A10A28', '#C7B42C', '#AAAAAA']}"
[results]="filterableData.exercisesProgress"
[gradient]="false"
[xAxis]="true"
[yAxis]="true"
[legend]="true"
[showXAxisLabel]="true"
[showYAxisLabel]="true"
[xAxisLabel]="Date"
[yAxisLabel]="Weight"
[autoScale]="true"
(select)="onSelect($event)">
</ngx-charts-line-chart>
</div>
我怎樣才能確保我可以分配給this.filterableData當值在組件本身中沒有定義?在模板中,我可以使用* ngIf,但是如何在組件級別執行? dropDownSelectedValue未明確分配,因爲* ng如果簽入模板。
不是第一個選項在子組件中執行api請求嗎?我有兩個子組件,主要原因是爲了避免兩個API請求。 –
啊。無論如何,我認爲它有兩個要求。然後,你想要做的就是把這個get()放入一個服務類的方法中,並將結果賦給服務中的類屬性。當你調用這個方法時,檢查它是否有價值。如果是,返回,如果不是,請打電話。 – Zolcsi
erm可觀察與獲取請求正在服務,然後我訂閱它在父組件。我可以輕鬆地將數據傳遞給子組件,它可以執行一個請求,並且我有兩個@input數據傳入兩個子組件。唯一的問題是我不知道如何處理重新分配給子組件中的其他數組。除非我在父組件中分配了額外的數組,但我認爲這不是很好,並且我想學習如何在這種情況下在子組件中操作。 –