如何处理 Angular 中不同模板的未定义数组?

How to handle undefined arrays in Angular for different templates?

我正在处理应用程序的搜索屏幕。我想在结果部分有三个结果。

我可以让空与非空工作得很好:

<ng-container *ngIf="results.length">
    <div class="result" *ngFor="let result of results">
        <a href="link-goes-here">Open Result</a>
        <search-result  [result]="result"></search-result>
    </div>
</ng-container>
<ng-container #elseBlock>
    No Results dude.
</ng-container>

但是,当我尝试混合检查 results 是否为 undefined 时,它似乎无法正常工作。我尝试使用 [ngSwitch],但这似乎也不起作用。我可以只创建一个布尔变量,它一开始是 false,然后在执行搜索后设置为 true,但我宁愿让我的数组以未定义开始,然后在第一次搜索后被分配。

您需要使用安全导航运算符 ?. 以防结果为空或未定义 elseBlock 可见

<ng-container *ngIf="results?.length;else elseBlock">
    <div class="result" *ngFor="let result of results">
        <a href="link-goes-here">Open Result</a>
        <search-result  [result]="result"></search-result>
    </div>
</ng-container>

<ng-template #elseBlock>
    No Results dude.
</ng-template>

这应该涵盖您的三个结果。假设 results 默认为 null 或 undefined,我们首先检查它是否存在。如果是,请检查它是否有任何值。如果用户尚未搜索,则 *ngIf 将 return false 并且不会呈现任何内容。

<ng-container *ngIf="results">
    <ng-container *ngIf="results.length > 0; else elseBlock >
       <div class="result" *ngFor="let result of results">
          <a href="link-goes-here">Open Result</a>
          <search-result  [result]="result"></search-result>
       </div>
    </ng-container>

    <ng-template #elseBlock>
        No Results dude.
    </ng-template>

</ng-container>