display:none https://developer.mozilla.org/en-US/docs/Web/CSS/display
From MDN Web Docs https://developer.mozilla.org/en-US/docs/Web/CSS/display
价值none
让您关闭元素的显示;什么时候
你用none
,所有后代元素也都有其显示
关掉。该文档的呈现方式就好像该元素没有呈现一样
存在于文档树中。
但是当使用开发工具查看页面的 DOM 时,仍然有元素确实存在在 DOM 树中。这意味着元素不会从 DOM 树中完全删除。
*ngIf="false" https://angular.io/api/common/NgIf
从 DOM 树中完全删除元素。因此,在页面渲染方面,比较display:none
, using *ngIf="false"
通过快速页面渲染提供更好的性能。
From Angular Guide https://angular.io/guide/structural-directives#ngif-case-study
The ngIf https://angular.io/api/common/NgIf指令不会隐藏 CSS 元素。它添加和
从 DOM 中物理删除它们。使用浏览器确认这一事实
用于检查 DOM 的开发人员工具。
当条件为false
, NgIf
从中删除它的宿主元素
DOM,将其与 DOM 事件(它生成的附件)分离,
将组件从 Angular 变化检测中分离出来并销毁它。
组件和 DOM 节点可以被垃圾收集并释放
记忆。
下面的图片将很好地描述它们
1) 不使用display:none
and *ngIf="false"
2)使用display:none
and *ngIf="false"
隐藏比较(display:none) 与删除 (*ngIf='false') https://angular.io/guide/structural-directives#why-remove-rather-than-hide
From Angular Guide https://angular.io/guide/structural-directives#why-remove-rather-than-hide
隐藏和删除之间的区别对于简单的问题来说并不重要
段落。当宿主元素附加到一个
资源密集型组件。这样的组件的行为仍在继续
即使隐藏时。该组件保持附加到其 DOM 元素。它
不断监听事件。 Angular 不断检查更改
可能会影响数据绑定。无论组件在做什么,它都会保持
正在做。
虽然不可见,但该组件及其所有后代
组件——占用资源。性能和内存负担可以是
严重时,响应能力会降低,并且用户什么也看不到。
从积极的一面来看,再次显示该元素很快。这
组件先前的状态被保留并准备显示。这
组件不会重新初始化——这一操作的成本可能很高。
所以隐藏和展示有时是正确的做法。
但如果没有令人信服的理由让它们留在身边,你的
首选应该是删除用户看不到的 DOM 元素
并使用结构指令恢复未使用的资源,例如NgIf
.
这些相同的考虑因素适用于每个结构指令,无论
内置或自定义。在应用结构指令之前,您可以
想要暂停一下考虑添加和的后果
删除元素以及创建和销毁组件。
希望这能帮助您理解它们之间的区别。