Angular 角度*ngIf良好实践(HTML/TS)

Angular 角度*ngIf良好实践(HTML/TS),angular,typescript,angular-ng-if,Angular,Typescript,Angular Ng If,很长一段时间以来,我一直在HTML页面中大量使用Angular的条件: <p *ngIf="var === true">Test</p> 然而,通过在这个方法中添加一个控制台日志,我看到它被调用了很多次(对于接近就绪的页面上的每个操作,调用了5次),因此我想知道这是否是一个好的实践 感谢您的回答。这是因为当您使用ChangeDetectionStrategy时,角度变化检测是如何工作的。默认值是每个组件默认使用的值(除非您更改)。我想说的是,检查两

很长一段时间以来,我一直在HTML页面中大量使用Angular的条件:

<p *ngIf="var === true">Test</p> 
然而,通过在这个方法中添加一个控制台日志,我看到它被调用了很多次(对于接近就绪的页面上的每个操作,调用了5次),因此我想知道这是否是一个好的实践


感谢您的回答。

这是因为当您使用
ChangeDetectionStrategy时,角度变化检测是如何工作的。默认值是每个组件默认使用的值(除非您更改)。我想说的是,检查两个条件是否满足并不是一个巨大的成本(除非您有复杂的逻辑,并且您的应用程序足够快)。您可以做的是更改
ChangeDetectionStrategy
或将此条件的结果存储在某个变量中,并在需要时重新计算。

这是因为当您使用
ChangeDetectionStrategy时角度变化检测是如何工作的。默认值
默认情况下每个组件都会使用它(除非您更改它)。我想说的是,检查两个条件是否满足并不是一个巨大的成本(除非您有复杂的逻辑,并且您的应用程序足够快)。您可以做的是更改
ChangeDetectionStrategy
或将此条件的结果存储在某个变量中,并在需要时重新计算。

如评论所述,使用您给出的简单函数时,性能几乎没有差异,甚至可能会有所帮助,因为您说它正在多个位置使用。屏幕上的每个事件都会触发您的检查,无论它是在HTML中还是在typescript中。作为我自己的一条规则,我将函数调用排除在任何HTML文件之外(单击或更改事件等特殊事件除外),以阻止自己做一些愚蠢的事情,并使我的应用程序超级滞后

这是我在HTML:

中调用安全/不安全调用的函数类型的一般列表。 从HTML调用这些类型的函数并不重要

  • 布尔/对象/字符串/数字/等检查
  • 简单if语句
不要从HTML调用这些类型的函数

  • 在数组上迭代
  • 可观察/主题/承诺呼叫
  • 服务器调用
  • 超时/等待

如评论所述,使用您提供的简单函数时,性能几乎没有差异,甚至可能是有益的,因为您说它在多个地方使用。屏幕上的每个事件都会触发您的检查,无论它是在HTML中还是在typescript中。作为我自己的一条规则,我将函数调用排除在任何HTML文件之外(单击或更改事件等特殊事件除外),以阻止自己做一些愚蠢的事情,并使我的应用程序超级滞后

这是我在HTML:

中调用安全/不安全调用的函数类型的一般列表。 从HTML调用这些类型的函数并不重要

  • 布尔/对象/字符串/数字/等检查
  • 简单if语句
不要从HTML调用这些类型的函数

  • 在数组上迭代
  • 可观察/主题/承诺呼叫
  • 服务器调用
  • 超时/等待

在这种特殊情况下,我认为这实际上不会损害性能


但是,为了避免在每个渲染中执行相同的代码,我建议创建一个新的组件布尔变量,该变量仅在多个变量更改时更新。它更具可读性,并防止您在函数开始变得更复杂的情况下执行代码

在这种特定情况下,我认为它实际上不会损害性能


但是,为了避免在每个渲染中执行相同的代码,我建议创建一个新的组件布尔变量,该变量仅在多个变量更改时更新。它更具可读性,并防止在函数开始变得更复杂时执行代码

内联版本也被多次调用,因此没有区别。调用这样一个简单的函数5次实际上什么都不是。(另外,你可以只
返回var1===true&…
如果(条件)返回true;否则返回false;
),如果你想说一些是真的,我通常使用简单:,例如
*ngIf=“var1&&var2&&var3”
-是的,我知道如果var1的值为“hello”,则条件为true,但没有人让我的变量获得值“hello”:。关于你的问题,没有表现上的差异。我喜欢clarifly的“在线”。注意:尝试对变量排序,可能得到的值“true”要比其他变量少。谢谢你的回答,很好,我现在看得更清楚了!:)内联版本也被多次调用,因此没有区别。调用这样一个简单的函数5次实际上什么都不是。(另外,你可以只
返回var1===true&…
如果(条件)返回true;否则返回false;),如果你想说一些是真的,我通常使用简单:,例如
*ngIf=“var1&&var2&&var3”
-是的,我知道如果var1的值为“hello”,则条件为true,但没有人让我的变量获得值“hello”:。关于你的问题,没有表现上的差异。我喜欢clarifly的“在线”。注意:尝试对变量排序,可能得到的值“true”要比其他变量少。谢谢你的回答,很好,我现在看得更清楚了!:)谢谢你的回答,很好,我现在看得更清楚了!:)谢谢你的回答,很好,我现在看得更清楚了!:)谢谢你的回答,很好,我现在看得更清楚了!:)谢谢你的回答,很好,我现在看得更清楚了!:)
<p *ngIf="var1 === true && var2 === true && var3 === true && var4 === true && var5 === true && var6 === true && var7 === true && var8 = == true && var9 === true && var10 === true">Test</p>
<p *ngIf="this.isVarsTrue()">Test</p>
isVarsTrue () {
    if (var1 === true && var2 === true && var3 === true && var4 === true && var5 === true && var6 === true && var7 === true && var8 === true && var9 === true && var10 === true) {
      return true;
    } else {
      return false;
    }
  }