至少有3種不同的方法可以從中獲得,但這聽起來像是在尋找一種完整的DOM方法,可以使用*ngIf
。
爲了您的按鈕組,你實際上可以使一個邏輯語句的功能來檢查渲染前返回的狀態,請注意<ng-container>
實際上並沒有生產和DOM:
<ng-container *ngIf="getRadioButtons() && getRadioButtons().length>
<cv-radio-button-group class="duration-radios"
[radioItems]="getRadioButtons()"
</cv-radio-button-group>
</ng-container>
在上面的代碼邏輯狀態期望首先getRadioButtons()返回一個項目,並且(假設它的返回將是一個數組),然後確保數組在填充之前被填充。
正如在評論中提到的,通常這種類型的檢查最好在使用Observable(或Promise)的打字稿組件和/或服務中實現。 Angular: Tour of Heroes - Http涵蓋此井,並深入。承諾
例子:
const promise =
new Promise((resolve, reject) => {
// do some async stuff
if (CONDITION) resolve(DATA);
else reject(ERROR);
})
.then(
(data) => { console.log(data); },
(err) => { console.log(err); }
);
對於你的組件打字稿component.ts
您的例子中,你想補充打字稿這樣的:
radioData: any;
isLoaded: false;
getRadioButtons {
const promise = new Promise((res, rej) => {
// ... previous radioButtons code ... ends with data.
res(radioButtonsData) // this sends the data to the promise handlers below
})
.then((data) => { this.radioData = data; this.isLoaded = true; })
你要麼使用*ngIf="isLoaded"
,也可以不是簡單地使用一個async pipe。
有關承諾和更高級別的優秀詳細使用示例,請查看this link並轉至「編寫您的第一個承諾」部分。
可以返回一個承諾或從你的'getRadionButtons'方法觀察到的,然後使用'async'管,而分配給'radioItems'財產,希望它能幫助,乾杯! ! –