Angular用来控制元素的展示与否的原生指令介绍


Posted in Javascript onJanuary 07, 2015

在Angular的原生指令中有这几个指令用来控制元素的展示与否,ng-show/ng-hide/ng-if和ng-switch。

在angular性能优化中,我们也常常会用到它。

我们看下他们的区别。

其中ng-show和ng-hide是一样的,只不过ng-show是满足条件就展示,ng-hide是满足条件就隐藏,下面就不再提到ng-hide。

Angular用来控制元素的展示与否的原生指令介绍

ng-show
ng-show接收的一个bool值,当为true的时候就会被触发去展示DOM节点。当ng-show的值为false的时候,在DOM节点上添加了一个ng-hide的一个类,这个类的表达式就是“display:none”。DOM load的时候ng-show里面的所有节点都会被加载。也就是说,ng-show仅仅是影藏和显示了DOM节点。也就意味如果油太多的ng-show指令,即使他们不显示,但他们所在的DOM节点还是会被渲染的。

ng-if
ng-if也接收的一个bool值,当它的值为false的时候,它所控制的节点并没有被创建或者说之前的DOM节点会被销毁掉,哪怕这个节点里面包含了很多ng的绑定都不会去执行。所以,我们在项目开发中,如果没有必要一次性加载完的dom就可以用ng-if来阻止ng事件发生,从而也就加快了dom的加载速度。特别是在repeat的时候,每条数据又包含了复杂的数据结构的时候效果特别明显。当它的值为true的时候,就会去创建DOM节点。

所以如果你用指令、模板来渲染额外的信息,例如通过点击来显示列表项的详细信息,一定要使用  ng-if(AngularJSv. 1.1.5以后)。它可阻止渲染(与ng-show相比)。

ng-switch
ng-switch的存在,让我们省去很多麻烦(应该说angular本身就这样)。比如我们之前用传统的方式去做一个tab选项卡。我们要一次次的循环然后在判断当前的状态最后再去执行相应的事情。在angular里面用ng-switch就非常的简单。ng-switch要先监听某一个变量,当此变量为什么值的时候下面就显示什么内容。如上面显示的,监听了type这么一个变量,当type的值等于‘aaa'的时候这块区域就会被创建并显示;当type的值等于‘bbb'的时候,之前'aaa'的dom全部会被销毁,然后'bbb'dom全部创建并显示。

例子 http://jsbin.com/hinehi/1/edit

Javascript 相关文章推荐
防止按钮在短时间内被多次点击的方法
Mar 10 Javascript
在JavaScript的AngularJS库中进行单元测试的方法
Jun 23 Javascript
js实现仿爱微网两级导航菜单效果代码
Aug 31 Javascript
HTML5 Shiv完美解决IE(IE6/IE7/IE8)不兼容HTML5标签的方法
Nov 25 Javascript
js+html5实现canvas绘制网页时钟的方法
May 21 Javascript
微信小程序 location API接口详解及实例代码
Oct 12 Javascript
vue.js通过自定义指令实现数据拉取更新的实现方法
Oct 18 Javascript
Bootstrap Scrollspy源码学习
Mar 02 Javascript
Vue监听数组变化源码解析
Mar 09 Javascript
详解vue-cli 脚手架项目-package.json
Jul 04 Javascript
Vue学习笔记进阶篇之多元素及多组件过渡
Jul 19 Javascript
VUE长按事件需求详解
Oct 18 Javascript
jQuery中children()方法用法实例
Jan 07 #Javascript
angular.element方法汇总
Jan 07 #Javascript
jQuery中slice()方法用法实例
Jan 07 #Javascript
angularJS中$apply()方法详解
Jan 07 #Javascript
jQuery中not()方法用法实例
Jan 06 #Javascript
jQuery中has()方法用法实例
Jan 06 #Javascript
jQuery中map()方法用法实例
Jan 06 #Javascript
You might like
浅析PHP Socket技术
2013/08/02 PHP
浅谈php(codeigniter)安全性注意事项
2017/04/06 PHP
PHP的mysqli_sqlstate()函数讲解
2019/01/23 PHP
thinkPHP事务操作简单案例分析
2019/10/17 PHP
goto语法在PHP中的使用教程
2020/09/17 PHP
functional继承模式 摘自javascript:the good parts
2011/06/20 Javascript
判断输入是否为空,获得输入类型的JS代码
2013/10/30 Javascript
jquery简单实现幻灯片的方法
2015/08/03 Javascript
jQuery多级手风琴菜单实例讲解
2015/10/22 Javascript
jQuery插件实现文件上传功能(支持拖拽)
2020/08/27 Javascript
jQuery多个版本和其他js库冲突的解决方法
2016/08/11 Javascript
浅谈js的异步执行
2016/10/18 Javascript
使用openSpeDiv方法实现Ecshop登录弹窗框效果
2017/03/13 Javascript
node.js操作mongodb简单示例分享
2017/05/25 Javascript
基于angular-utils-ui-breadcrumbs使用心得(分享)
2017/11/03 Javascript
node 使用 async 控制并发的方法
2018/05/07 Javascript
clipboard.js在移动端复制失败的解决方法
2018/06/13 Javascript
Vue兼容ie9的问题全面解决方案
2018/06/19 Javascript
浅谈微信小程序flex布局基础
2018/09/10 Javascript
vue+ts下对axios的封装实现
2020/02/18 Javascript
Js Snowflake(雪花算法)生成随机ID的实现方法
2020/08/26 Javascript
[54:53]2014 DOTA2国际邀请赛中国区预选赛 LGD-GAMING VS CIS 第二场
2014/05/23 DOTA
Python中删除文件的程序代码
2011/03/13 Python
Python(Django)项目与Apache的管理交互的方法
2018/05/16 Python
Python内置random模块生成随机数的方法
2019/05/31 Python
python实现接口并发测试脚本
2019/06/25 Python
使用Keras建立模型并训练等一系列操作方式
2020/07/02 Python
Python 使用SFTP和FTP实现对服务器的文件下载功能
2020/12/17 Python
利用CSS3参考手册和CSS3代码生成工具加速来学习网页制
2012/07/11 HTML / CSS
中间件分为哪几类
2016/09/18 面试题
硕士研究生自我鉴定
2013/11/08 职场文书
小学中队活动总结
2015/05/11 职场文书
美甲店的创业计划书模板
2019/08/23 职场文书
python绘图subplots函数使用模板的示例代码
2021/04/30 Python
Win10此设备不支持接收Miracast无法投影的解决方法
2022/07/07 数码科技
windows server2012 R2下安装PaddleOCR服务的的详细步骤
2022/09/23 Servers