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 相关文章推荐
你需要知道的10个最佳javascript开发实践小结
Apr 15 Javascript
Javascript 检测键盘按键信息及键码值对应介绍
Jan 03 Javascript
侧栏跟随滚动的简单实现代码
Mar 18 Javascript
Node.js的特点和应用场景介绍
Nov 04 Javascript
JS控制弹出悬浮窗口(一览画面)的实例代码
May 30 Javascript
微信小程序 icon组件详细及实例代码
Oct 25 Javascript
原生js实现放大镜特效
Mar 08 Javascript
jQuery实现的鼠标拖动画矩形框示例【可兼容IE8】
May 17 jQuery
CKeditor4 字体颜色功能配置方法教程
Jun 26 Javascript
webpack3升级到webpack4遇到问题总结
Sep 30 Javascript
解决vue初始化项目时,一直卡在Project description上的问题
Oct 31 Javascript
微信小程序自定义modal弹窗组件的方法详解
Dec 20 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网页游戏学习之Xnova(ogame)源码解读(十四)
2014/06/26 PHP
PHP使用JSON和将json还原成数组
2015/02/12 PHP
十幅图告诉你什么是PHP引用
2015/02/22 PHP
php中将一个对象保存到Session中的方法
2015/03/13 PHP
PHP之将POST数据转化为字符串的实现代码
2016/11/03 PHP
Yii支持多域名cors原理的实现
2018/12/05 PHP
laravel实现登录时监听事件,添加登录用户的记录方法
2019/09/30 PHP
[原创]js与自动伸缩图片 自动缩小图片的多浏览器兼容的方法总结
2007/03/12 Javascript
IE6下CSS图片缓存问题解决方法
2010/12/09 Javascript
jquery插件validate验证的小例子
2013/05/08 Javascript
javascript抖动元素的小例子
2013/10/28 Javascript
js使用for循环查询数组中是否存在某个值
2014/08/12 Javascript
JS 对象属性相关(检查属性、枚举属性等)
2015/04/05 Javascript
微信小程序 教程之WXSS
2016/10/18 Javascript
简单的jQuery拖拽排序效果的实现(增强动态)
2017/02/09 Javascript
图文介绍Vue父组件向子组件传值
2018/02/17 Javascript
详解JavaScript中new操作符的解析和实现
2020/09/04 Javascript
vue项目配置 webpack-obfuscator 进行代码加密混淆的实现
2021/02/26 Vue.js
python之模拟鼠标键盘动作具体实现
2013/12/30 Python
django加载本地html的方法
2018/05/27 Python
带你认识Django
2019/01/15 Python
Python一个简单的通信程序(客户端 服务器)
2019/03/06 Python
Python实现语音识别和语音合成功能
2019/09/20 Python
Python中的list与tuple集合区别解析
2019/10/12 Python
Python如何省略括号方法详解
2020/03/21 Python
PyTorch 中的傅里叶卷积实现示例
2020/12/11 Python
canvas实现按住鼠标移动绘制出轨迹的示例代码
2018/02/05 HTML / CSS
美国伊甸园兄弟种子公司:Eden Brothers
2018/07/01 全球购物
投标授权委托书范文
2014/08/02 职场文书
自主招生英文自荐信
2015/03/25 职场文书
青年联谊会致辞
2015/07/31 职场文书
2016年元旦寄语
2015/08/17 职场文书
描述鲁迅的名言整理,一生受用
2019/08/08 职场文书
导游词之黄果树瀑布
2019/09/20 职场文书
未发现nvidia显卡怎么办?Win11系统中未检测到nvidia显卡解决教程
2022/04/08 数码科技
Python实现Matplotlib,Seaborn动态数据图
2022/05/06 Python