问题

项目中遇到一个问题,有一个过滤查询的面板,需要通过一个展开折叠的button,来控制它的show 和 hide。这个面板中,有一个Select 组件,一个 input 查询输入框。

原来代码是:

<div class="accordion-content" *ngIf="showFilter"><div class="pTop"><div app-choosen-select [options]="selectCompOptions" (selectedDataChange)="onFilterChange($event)" class="cpu-select"></div></div><div class="form-group"><input type="text" placeholder="查询" [(ngModel)]="searchTxt" (ngModelChange)="searchNode()"></div>
</div>

然后发现,每次点击 toggle button,都会触发一次onFilterChange()事件,因为 app-choosen-select 组件在初始化时会触发传入的 selectedDataChange 事件。从而影响到预期的结果。

解决方案

将 `*ngIf` 改成 `hidden`。
<div class="accordion-content" [hidden]="!showFilter"><div class="pTop"><div app-choosen-select [options]="selectCompOptions" (selectedDataChange)="onFilterChange($event)" class="cpu-select"></div></div><div class="form-group"><input type="text" placeholder="查询" [(ngModel)]="searchTxt" (ngModelChange)="searchNode()"></div>
</div>

What is the difference between *ngIf and [hidden]?

参考:https://stackoverflow.com/questions/43034758/what-is-the-difference-between-ngif-and-hidden

ngIf is a structural directive, it creates/destroys content inside the DOM. The [hidden] statement just hides/shows the content with css, i.e. adding/removing display:none to the element's style.

也就是,*ngIf=true 时,会重新创建其内部的 DOM 元素包括子组件,同时如果设置了数据绑定、事件绑定,也会重新绑定;*ngIf=false 时,会销毁其内部的DOM 元素和子组件,也会销毁绑定的数据和绑定的事件。

但是,[hidden]=true,只是隐藏了DOM元素和子组件,并没有重新初始化,绑定的数据和事件都还在的。

So [hidden] is better used when we want the show/hide status to change frequently, for example on a button click event, so we do not have to load the data every time the button is clicked, just changing its hidden attribute would be enough.
Note that the performance difference may not be visible with small data, only with larger objects.

所以,在这样的toggle 某一个元素的情况下,使用[hidden] 比较好。

转载于:https://www.cnblogs.com/liulei-cherry/p/10062680.html

Angular5 *ngIf 和 hidden 的区别相关推荐

  1. display:none与visible:hidden的区别

    display:none和visible:hidden都能把网页上某个元素隐藏起来,但两者有区别: display:none ---不为被隐藏的对象保留其物理空间,即该对象在页面上彻底消失,通俗来说就 ...

  2. [css] 说说display:none和visibility:hidden的区别

    [css] 说说display:none和visibility:hidden的区别 display:none dom对象不渲染. visibility:hidden 隐藏但是dom对象渲染. 个人简介 ...

  3. display:none和visibility:hidden的区别

    在使用CSS隐藏一些元素时,我们经常用到 display:none 和 visibility:hidden.两者差别如下: 1. 是否占据空间 display:none,该元素不占据任何空间,在文档渲 ...

  4. v-show和v-if的区别 display:none和visible: hidden的区别

    1.v-show 和 v-if 在隐藏一个元素的时候有什么不同, 应该如何来选择?** v-show 显示内容 本质就是通过设置 css 中的 display 设置为 none,控制隐藏 v-if 显 ...

  5. _blank 和 _self的区别以及display:none和visibility:hidden的区别

    _blank 和 _self的区别 target=_blank会在当前窗口之外再打开一个新窗口来显示新的页面 target=_self在当前窗口打开新页 面 display:none和visibili ...

  6. 列表渲染 wx:key 的作用、条件渲染 wx:if 与 hidden 的区别

    这是微信小程序踩坑系列的第三篇,想要了解更多关于微信小程序开发的那些事,欢迎关注我的<微信小程序>专栏. 前言 开发微信小程序离不开"页面渲染",对于初学者来说很难理解 ...

  7. 关于CSS属性display:none和visible:hidden的区别

    display:none和visible:hidden都是把网页上某个元素隐藏起来的功能,但两者有所区别,经过亲自实验,我发现使用visible:hidden属性会使对象不可见,但该对象在网页所占的空 ...

  8. 易混淆知识点(2):display:none与visible:hidden的区别

    display:none和visible:hidden都能把网页上某个元素隐藏起来,但两者有区别: display:none 不为被隐藏的对象保留其物理空间,即该对象在页面上彻底消失,通俗来说就是看不 ...

  9. display none 隐藏后怎么显示_display:none与visibility:hidden的区别?

    " 因为平时总是觉得自己不停的修改bug,好记性不如烂笔头,所以把自己每天遇到问题记录下来." 要想知道两者的区别,就要知道他们代表的是什么意思, 其实两者都是对内容进行隐藏的的声 ...

最新文章

  1. Python 3 判断2个字典相同
  2. vendor自动恢复_解决 vendor 中存在大小写变更问题
  3. commons-logging和log4j
  4. iterator遍历_HashMap 的 7 种遍历方式与性能分析!(强烈推荐)
  5. Kotlin入门(28)Application单例化
  6. 收拾老家发现的老版纸币,现在还能用吗?
  7. [转]Android学习系列(1)--为App签名(为apk签名)
  8. Linux/Unix 中 wheel 组的来源
  9. 计算机专业数学建模结课论文,大学生数学建模论文范文
  10. laravel 打包成zip并下载
  11. Win10系统安装失败?用这种方法一键就解决了
  12. PIP卸载升级与安装不成功
  13. 用户金字塔模型的应用:知乎案例分析
  14. Python实现电子词典(web)
  15. Scratch软件编程等级考试一级——20210911
  16. mysql的root用户没有权限管理_mysql中root用户失去了root权限怎么处理呢?
  17. matlab 双边滤波(彩色图)
  18. python中的类怎样理解_深入理解Python中的元类(metaclass)
  19. 蚂蚁借呗的利息计算方式?
  20. 教大家如何清理C盘~

热门文章

  1. REVERSE-PRACTICE-BUUCTF-25
  2. docker jdk mysql_docker部署springboot前后端分离项目(jdk+jar包+mysql+redis+nginx)(示例代码)...
  3. 【CodeForces - 1197C】Array Splitting(水题)
  4. 【POJ - 1062】【nyoj - 510】昂贵的聘礼 (Dijkstra最短路+思维)
  5. 【CF#2A】Winner(模拟 STL-map)☆
  6. Java 新手习题()
  7. Java (jdk win 10)
  8. * 完成随机点名案例;学生姓名都提前写在文件中;:每次敲回车,随机显示一个学生姓名,每人最多显示一次,所有人都显示完了就结束程序;
  9. * 将字符串日期时间格式,转为毫秒
  10. 数组之间的计算matlab,matlab中的矩阵运算和数组运算方法