【问题标题】:How to use ngSwitch with template?如何在模板中使用 ngSwitch?
【发布时间】:2016-09-05 21:44:40
【问题描述】:

我有带有 IF 语句的模板:

<li *ngIf="activity.entity_name == 'Project'" [activity-project-item]="activity"></li>
<li *ngIf="activity.entity_name == 'Tooling'" [activity-tooling-item]="activity"></li>
<li *ngIf="activity.entity_name != 'Project' && activity.entity_name != 'Tooling'" [activity-item]="activity"></li>

如何用 ngSwitch 指令编写这个模板?

例如这个模板有解析错误“嵌入模板上的组件”:

<li [ngSwitch]="activity.entity_name">
    <template [ngSwitchCase]="'Project'" [activity-project-item]="activity"></template>
</li>

而且这个模板有解析错误“NgSwitch 没有提供者”:

<template [ngSwitch]="activity.entity_name">
    <li [ngSwitchCase]="'Project'" [activity-project-item]="activity"></li>
</template>

【问题讨论】:

    标签: angular


    【解决方案1】:

    一种可能性:

    <li [ngSwitch]="activity.entity_name">
      <template [ngSwitchCase]="'Project'">Selected Project</template>
      <template [ngSwitchCase]="'Tooling'">Selected Tooling</template>
      <template ngSwitchDefault>Or else...</template>
    </li>
    

    替代语法:

    <div [ngSwitch]="activity.entity_name">
      <li *ngSwitchCase="'Project'">Selected Project</li>
      <li *ngSwitchCase="'Tooling'">Selected Tooling</li>
      <li *ngSwitchDefault>Or else...</li>
    </div>
    

    看看official docslive demo

    【讨论】:

      【解决方案2】:

      模板

      <li [ngSwitch]="activity.entity_name">
        <template [ngSwitchCase]="'Project'">Content here</template>
        <template [ngSwitchCase]="'Project2'">Other content here</template>
        <template ngSwitchDefault>Content if nothing matched</template>
      </li>
      

      还要确保拥有此组件的模块导入CommonModule。否则,ngSwitch 将无法识别。

      @NgModule({
          ...
          imports: [CommonModule...],
          declarations: [ThisComponent...],
          ...
      })
      export default class MyModule {}
      

      【讨论】:

      • 这是正确的答案。在 Angular 8 中,这在使用 [ngSwitchCase] 而不是 *ngSwitchCase 的组件内工作。查看 xameeramir 回复以了解正在发生的事情:stackoverflow.com/questions/42456459/…
      • 来自 Angular:“NgSwitch 本身不是一个结构指令。它是一个控制其他两个 switch 指令行为的属性指令。这就是为什么你写 [ngSwitch],而不是 *ngSwitch。” angular.io/guide/structural-directives
      猜你喜欢
      • 1970-01-01
      • 2016-12-05
      • 2015-09-07
      • 1970-01-01
      • 1970-01-01
      • 2018-08-29
      • 1970-01-01
      • 1970-01-01
      • 2016-10-27
      相关资源
      最近更新 更多