Angular5 *ngIf 和 hidden 的区别

问题

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

725304-20181204101828506-174840323.png

原来代码是:

<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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/450466.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ZooKeeper学习-- Zookeeper简单介绍

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 一、分布式协调技术 在给大家介绍ZooKeeper之前先来给大家介绍一种技术——分布式协调技术。那么什么是分布式协调技术&#xff1f;那么…

选择结构 案例分析

C语言goto&#xff0c;longjmp()和setjmp()之间有什么区别 goto语句实现程序执行中的近程跳转(local jump)&#xff0c;longjmp()和setjmp()函数实现程序执行中的远程跳转(nonlocaljump&#xff0c;也叫farjump)。通常你应该避免任何形式的执行中跳转&#xff0c;因为在程序中…

Python基础班---第一部分(基础)---Python基础知识---第一个Python程序

01. 第一个 HelloPython 程序 1.1 Python 源程序的基本概念 Python 源程序就是一个特殊格式的文本文件&#xff0c;可以使用任意文本编辑软件做 Python 的开发Python 程序的 文件扩展名 通常都是 .py1.2 演练步骤 在桌面下&#xff0c;新建 Python基础1 目录在 Python基础1 目录…

面试题-集合

1.JAVA 中数组和集合的区别 &#xff1f; &#xff08;1&#xff09;数组的长度是固定的&#xff0c;而集合长度是可以改变的。 &#xff08;2&#xff09;数组可以储存基本数据类型和引用数据类型&#xff0c;而集合只能储存引用数据类型&#xff08;也就是对象&#xff09;…

七牛云上传视频如何有效做到节省空间

在上传视频的时候&#xff0c;我们通常会保存到第三方【七牛云】平台。不过大多数程序员在系统后台上传视频后&#xff0c;一般都是保存到了本地&#xff0c;如果视频非常多或者视频容量特别大的情况下&#xff0c;那么我们的服务器迟早有一天会满&#xff0c;为了节省空间&…

运算符的优先级总能起作用吗?

有关运算符优先级的规则稍微有点复杂。在大多数情况下&#xff0c;这些规则确实是你所需要的&#xff0c;然而&#xff0c;有人也指出其中的一些规则本来是可以设计得更好的。让我们快速地回顾一些有关内容&#xff1a;“运算符优先级”是这样一些规则的集合——这些规则规定了…

按钮交互loading ---- 转圈圈 加载

按钮loading状态自定义选项&#xff08;功能&#xff09;&#xff1a; 可以在元素上添加 data-am-loading 来设置选项&#xff1a; spinner 加载动画图标&#xff0c;适用于支持 CSS3 动画、非 input 元素&#xff0c;写图标名称即可&#xff1b;loadingText 加载时显示的文字&…

面试题-线程

1.什么是线程 &#xff1f;线程和进程的区别 &#xff1f; 线程是操作系统能够进行运算调度的最小单位&#xff0c;它被包含在进程之中&#xff0c;是进程中的实际运作单位。而进程是系统中 正在运行的一个程序&#xff0c;程序一旦运行就是进程。 区别&#xff1a;&#xf…

区块链入门教程

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 区块链&#xff08;blockchain&#xff09;是眼下的大热门&#xff0c;新闻媒体大量报道&#xff0c;宣称它将创造未来。 可是&#xf…

响应式面包屑菜单

在线演示 本地下载 转载于:https://www.cnblogs.com/qixidi/p/10064991.html

5个能提高你工作效率的Excel技巧

Excel的应用在工作中还是十分广泛的&#xff0c;那么下面小编就来为大家分享5个Excel技巧来帮助大家轻松提高工作效率。1. 不用数据验证或数据有效性&#xff0c;自动生成下拉列表方法&#xff1a;按【Alt↓】组合键注意点&#xff1a;光标要定位在已有数据区域的下一个单元格&…

很好的推荐书籍

五百本编程书籍推荐【信息化类】 书号书名作者出版时间定价对应页码TP02041企业资源计划&#xff08;ERP&#xff09;教程罗鸿2006-1&#xffe5;28.00—TP02031ERP理论、方法与实践周玉清 等2005-12&#xffe5;39.00—TP01059ERP原理设计实施&#xff08;第3版&#xff09;罗…

消息推送

我有一个运动类app软件,它的服务器是集群式的&#xff0c;有N台服务器。现在我想在app上开发一个功能&#xff0c;在每天的晚上11点进行消息推送&#xff0c;他会推送今天走多少步&#xff0c;是否健康&#xff0c;明天至少走多少步。请问如何11点能准时触达到用户&#xff1f;…

day10:函数进阶

1&#xff0c;函数的命令空间&#xff08;内置命名空间&#xff0c;全局命名空间&#xff0c;局部命名空间&#xff09;&#xff0c;内置大于全局大于局部 2&#xff0c;内置命名空间&#xff0c;就是Python解释器一启动就可以使用的名字&#xff0c;存储在内置命名空间中&…

mysql导入source注意点

mysql的导入导出要注意字符集&#xff0c;防止查询乱码&#xff01; 导入前设置字符集 set names utf8; //导入指定编码source /xxx.sqlcommit;

哔哩哔哩修改视频速度

按住f12,打开控制台&#xff0c;先输入 const video document.querySelector("video"); video.play() // 开始 video.pause() // 暂停 video.playbackRate3 // 三倍速

编译预处理

C语言编译中&#xff0c;什么时候应该使用32位编译程序? 32位编译程序应该在32位操作系统上使用。由32位编译程序生成的32位程序比16位程序运行得更快&#xff0c;这正是任何32位的东西都很热门的原因。有那么多不同版本的Microsoft Windows&#xff0c;它们和哪种编译程序组成…

去除List集合中的重复值(四种好用的方法)

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 最近项目中需要对list集合中的重复值进行处理&#xff0c;大部分是采用两种方法&#xff0c;一种是用遍历list集合判断后赋给另一个list…

jQuery---过滤选择器

4、过滤选择器 过滤选择器主要是通过特定的过滤规则来筛选出所需的DOM元素&#xff0c;过滤规则与CSS 中的伪类选择器语法相同&#xff0c;即选择器都以一个冒号(:)开头。按照不同的过滤规则&#xff0c; 过滤选择器可以分为基本过滤、内容过滤、可见性过滤、属性过滤、子元素过…

安装Frida抓包工具

curl https://bootstrap.pypa.io/get-pip.py | python3 pip install frida pip install frida-tools