您可以从中至少采用 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() 返回一个项目,并且(假设它的返回将是一个数组)然后确保在渲染之前填充该数组。
如评论中所述,通常这种类型的检查最好在您的打字稿组件和/或服务中使用 Observables(或 Promise)实现。The 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; })
您可以使用 an*ngIf="isLoaded"
或者您可以简单地使用async pipe。
有关 Promise 的详细使用示例和更高级的使用,请查看此链接并转到“编写您的第一个 Promise”部分。