【问题标题】:Angular ngIf with multiple statements in elseAngular ngIf 在 else 中有多个语句
【发布时间】:2020-08-27 10:46:03
【问题描述】:

如何用 else 下的多个语句编写 ngIf?我有一种感觉,我在做一些愚蠢的事情,但惊讶地发现除了我之外没有其他人处于这种情况。 *ngIf=col !='动作'; else showActions;iWouldLiketoAddAnotherAssignmentHere;

if(condition){
statement1;
statement2;
}else
{statement3;
 statement4;
 statement5;
}

有人不理解问题并不代表问题不明确。这就是我上次离开SO的原因,你不理解的问题不要再标记了,让其他理解的人回答或忽略它。

【问题讨论】:

  • 谢谢,我确实看过,但不符合我的要求。我不认为我会被困在这么简单的事情上,但我在这里。当 if 条件评估为 true 或 false 时,我是否可以拥有多个语句?
  • edit您的问题并扩展您的示例,也许包括您想使用的代码,即使它不起作用。正如目前所写的那样,我不确定您到底要做什么。
  • 请检查我的更新答案,我希望我已经弄清楚你真正在寻找什么。

标签: angular angular-ng-if


【解决方案1】:

您是否正在寻找then else

<ng-container *ngIf="col !='actions'; then noActions; else showActions;></ng-container>

<ng-template #noActions>
 I have no actions
</ng-template>

<ng-template #showActions>
 I have some actions
</ng-template>

你甚至可以用多个扩展它

<ng-container *ngIf="col !='actions'; then noActions; else (col === 'actions' && showActions) || (something === 3 && somethingElse)";></ng-container>

<ng-template #noActions>
 I have no actions
</ng-template>

<ng-template #showActions>
 I have some actions
</ng-template>

<ng-template #somethingElse>
 I have some something else
</ng-template>

【讨论】:

  • 感谢您提供代码 sn-p 但这再次说明您在 if 或 else 条件中不能有多个语句
  • 我不知道你所说的不止一个是什么意思。听起来您正在寻找:&lt;ng-container *ngIf="col !='actions' &amp;&amp; anotherStatement; then noActions; else showActions;&gt;&lt;/ng-container&gt;。您可以在模板中使用普通的逻辑表达式,由&amp;&amp;|| 链接
  • 我添加了一个 java 或 c# 代码 sn-p 我正在尝试做的事情 - 从我在文档和其他帖子中看到的所有内容来看,Angular 似乎不支持我的身份专门找的,所以我只好找个工作了。问题是我必须用 && 或 || 链接我的表达。而且我没有条件放在那里,我希望在满足 if 或 else 条件时执行更多的表达式。
  • 你有打字稿(TS)。使用生命周期挂钩来触发 TS 代码并链接尽可能多的表达式。在 Angular 中,HTML 是由 CSS 样式化并由 TS 驱动的结构 :)
【解决方案2】:

根据最佳实践,模板上不应有更多逻辑。因为它可能会导致难以跟踪错误和未经测试的场景。

在您的组件中移动这些逻辑。并创建多个标志,然后尝试显示/隐藏确切的段。

【讨论】:

  • 您可能是对的,因为到目前为止我找不到解决方案。我确实知道调试 if 条件以使其成为最佳实践是多么复杂,但我现在必须接受它,谢谢
【解决方案3】:

在模板中处理此类多个条件的最佳方法是使用 ngSwitch,查看 Angular 文档 https://angular.io/api/common/NgSwitch

【讨论】:

  • 我不想有多个 if else 条件 - 我想在一个 if 或 else 条件下有多个语句。
【解决方案4】:

谢谢,我确实看过,但不符合我的要求。我不认为我会被困在这么简单的事情上,但我在这里。当 if 条件评估为 true 或 false 时,我是否可以拥有多个语句?

我猜你正在寻找ngSwitch

参考https://angular.io/api/common/NgSwitch

更新:

经过深思熟虑,我希望,我终于能够弄清楚你的要求......

<ng-container *ngIf="col !='actions'; else multilpleActions">
  ...
</ng-container>

<ng-template #multilpleActions>
  <ng-container *ngTemplateOutlet="showAction"></ng-container>
  <ng-container *ngTemplateOutlet="anotherAction"></ng-container>
</ng-template>

<ng-template #showAction>
  ...
</ng-template>

<ng-template #anotherAction>
  ...
</ng-template>

我真的希望这会有所帮助。

更新(修改后)

让我指出,*ngIf 不适用于按顺序运行的代码语句,但适用于只是文本的 HTML 模板。 *ngIf单个元素 执行 boolean 操作,并让您从 2 个模板中选择一个要呈现到其中的模板。在任何给定时间,您都可以仅将一个模板呈现给一个元素。所以你要求的是不可能的。如果您需要将多个模板呈现给一个元素,唯一的出路是将它们作为父元素的子元素并将父元素呈现给元素。

编码愉快!

【讨论】:

  • 谢谢@T。 Sunil Rao - 这很接近,但要使其发挥作用,我必须将我的语句组合在 if 或 else 语句中,我的用例略有不同,但如果我找不到替代方案,我可能不得不求助于这种方法。
  • 是的,我同意您的更新,并且可能会考虑解决此问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-05
相关资源
最近更新 更多