前言

大家都知道在使用anularjs开发前端页面时,常常使用ng-show、ng-hide、ng-if功能来控制页面元素的显示或隐藏,那他们之间有什么不同呢?下面通过这篇文章来一起看看吧。
实现原理
ng-show/ng-hide是通过修改CSS样式方式控制元素显示与隐藏,对应的DOM元素会一直存在于当前页面中,而ng-if根据表达式的值动态的在当前的页面中添加删除页面元素。如果赋值表达式的值为false,那么这个元素就会从页面中删除,否则会添加一个元素。ng-if创建元素时用的是被它编译后的代码,如果ng-if内部的代码被其它方式修改过,那么修改只会对本次展现有效,页面元素重新渲染后修改效果会消失,而ng-show/ng-hide则能够保留dom元素上次修改后的状态。
在作用域方面,两者也存在差异:当一个元素被ng-if从DOM中删除时,与其关联的作用域也会被销毁。而且当它重新加入DOM中时,则会生成一个新的作用域,而ng-show和ng-hide则不会。
通过如下代码并结合浏览器开发者工具可以清楚的看出二者之间的不同:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" ng-app="app"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>ng-if ng-show ng-hide</title> <script type="text/javascript" class="library" src="http://libs.useso.com/js/angular.js/1.2.9/angular.min.js"></script> </head> <body> <div ng-controller="MainCtrl"> <div ng-show="false"> ng-show = false </div> <div ng-show="true"> ng-show=true </div> <div ng-if="true"> ng-if = true </div> <div ng-if="false"> ng-if = false </div> </div> </body> </html>
js
angular.module("app",[]).controller("MainCtrl",function($scope){
});
页面最终的HTML片断如下:
<div ng-controller="MainCtrl" class="ng-scope"> <div ng-show="false" class="ng-hide"> ng-show = false </div> <div ng-show="true" class=""> ng-show=true </div> <!-- ngIf: true --><div ng-if="true" class="ng-scope"> ng-if = true </div><!-- end ngIf: true --> <!-- ngIf: false --> </div>
由于ng-if/ng-hide(ng-show)在原理上有很大的差别,所以在某些情况下展示出来的效果有较大的差别。
正确使用ng-if和ng-show
在使用bootstrap中,我们会经常用到按钮组,也就是btn-group,如果仔细观察的话,会发现一个按钮组的第一个和最后一个按钮分别是有圆角的,如下图:
但是中间的按钮是没有圆角的,这样显得比较美观。
在结合angular使用过程中,有时候需要根据一些条件来隐藏掉一些按钮,当隐藏第一个或最后一个按钮时,会出现一些小问题。
代码:
<div class="row" ng-controller='myCtrl'> <div class="col-lg-offset-1"> <div class="btn-group"> <button class='btn btn-primary'>button1</button> <button class='btn btn-primary'>button2</button> <button class='btn btn-primary' ng-show='false'>button3</button> </div> </div> </div>
效果如图:
我们发现button2的圆角不见了,这和我们预期的效果不一致。
问题是由ng-show引起的,而我们知道ng-show只是改变元素的display属性,所以我们把这个ng-show='false'改成 style='display:none' 的话也会有这个圆角消失的效果。
那么我们应该怎么做,才会让它显示圆角呢?
如果我们想要达到显示圆角的效果,那么我们应该用ng-if ,只需要将代码中的ng-show='false' 改成ng-if='false' 即可。
原因是:ng-if会根据表达式的值来决定当前这个DOM元素的创建与销毁。当表达式为返回true时,创建,反之,则销毁。销毁就意味着这个DOM元素从页面中删除了。
效果如图:
圆角显示了,证明button3已经从页面中删除了。
再进一步,我们打开开发者工具也可以发现这个DOM元素确实已经不存在了:
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。
# angularjs
# ng
# hide
# angular
# show
# if
# AngularJS基础 ng-if 指令用法
# AngularJS使用ng-repeat和ng-if实现数据的删选显示效果示例【适用于表单数据的显示
# Angular.JS中指令ng-if、ng-show/ng-hide和ng-switch的使用教程
# Angular.JS中指令ng-if的注意事项小结
# 圆角
# 第一个
# 如图
# 这篇文章
# 则会
# 的是
# 就会
# 会有
# 也会
# 是有
# 大家都
# 是由
# 才会
# 只需
# 上有
# 只会
# 不见了
# 怎么做
# 要将
# 让它
相关文章:
阿里云网站搭建费用解析:服务器价格与建站成本优化指南
如何高效配置香港服务器实现快速建站?
建站之星导航如何优化提升用户体验?
香港服务器建站指南:外贸独立站搭建与跨境电商配置流程
如何在阿里云虚拟机上搭建网站?步骤解析与避坑指南
如何在Windows 2008云服务器安全搭建网站?
品牌网站制作公司有哪些,买正品品牌一般去哪个网站买?
网站app免费制作软件,能免费看各大网站视频的手机app?
中山网站制作网页,中山新生登记系统登记流程?
建站主机空间推荐 高性价比配置与快速部署方案解析
nginx修改上传文件大小限制的方法
如何用VPS主机快速搭建个人网站?
建站之星安装失败:服务器环境不兼容?
网站制作服务平台,有什么网站可以发布本地服务信息?
香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南
定制建站价位费用解析与套餐推荐全攻略
阿里云网站制作公司,阿里云快速搭建网站好用吗?
c# Task.Yield 的作用是什么 它和Task.Delay(1)有区别吗
香港服务器网站推广:SEO优化与外贸独立站搭建策略
如何挑选最适合建站的高性能VPS主机?
七夕网站制作视频,七夕大促活动怎么报名?
清单制作人网站有哪些,近日“兴风作浪的姑奶奶”引起很多人的关注这是什么事情?
详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)
如何用好域名打造高点击率的自主建站?
如何确保FTP站点访问权限与数据传输安全?
如何高效完成独享虚拟主机建站?
怎么将XML数据可视化 D3.js加载XML
简历在线制作网站免费版,如何创建个人简历?
seo网站制作优化,网站SEO优化步骤有哪些?
郑州企业网站制作公司,郑州招聘网站有哪些?
如何制作网站标识牌,动态网站如何制作(教程)?
武汉网站如何制作,黄黄高铁武穴北站途经哪些村庄?
海南网站制作公司有哪些,海口网是哪家的?
如何快速查询域名建站关键信息?
如何快速搭建FTP站点实现文件共享?
上海网站制作网页,上海本地的生活网站有哪些?最好包括生活的各个方面的?
建站之星后台管理系统如何操作?
如何选择高效便捷的WAP商城建站系统?
如何快速建站并高效导出源代码?
购物网站制作公司有哪些,哪个购物网站比较好?
如何通过虚拟主机快速完成网站搭建?
如何用已有域名快速搭建网站?
建站主机CVM配置优化、SEO策略与性能提升指南
如何快速生成ASP一键建站模板并优化安全性?
建站主机解析:虚拟主机配置与服务器选择指南
如何快速搭建响应式可视化网站?
湖南网站制作公司,湖南上善若水科技有限公司做什么的?
黑客如何利用漏洞与弱口令入侵网站服务器?
高端云建站费用究竟需要多少预算?
小程序网站制作需要准备什么资料,如何制作小程序?
*请认真填写需求信息,我们会在24小时内与您取得联系。