转载 

AngularJS的学习--ng-show/ng-hide/ng-if和ng-switch

分类:    5177人阅读    IT小君  2015-05-28 12:23

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

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

我们看下他们的区别。

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

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全部创建并显示。


示例如下:

<!doctype html>
<html ng-app>
<head>
	<meta charset="UTF-8">
	<title></title>
	<link rel="stylesheet" href="http://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/2.3.2/css/bootstrap.min.css">
	<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.0rc1/angular.min.js"></script>	
	<script type="text/javascript">
		var DemoCtrl = function($scope){			
			$scope.ShowMode = "list";

			$scope.ChangeShow = function(ShowMode){
				$scope.ShowMode = ShowMode;
			}
		};
	</script>
</head>
<body ng-controller="DemoCtrl" ng-switch="ShowMode">
	<div class="well span6" ng-switch-when="list">
		我是列表區塊
	</div>	
	<div class="well span6" ng-switch-when="add">
		我是新增區塊
	</div>
	<div class="well span6" ng-switch-when="edit">
		我是修改區塊
	</div>
	<div class="well span6" ng-switch-when="detail">
		我是明細區塊
	</div>	
	<div class="well span6" style="float:none;">		
	<button ng-click="ChangeShow('list')">switch to list</button>
	<button ng-click="ChangeShow('add')">switch to add</button>
	<button ng-click="ChangeShow('edit')">switch to edit</button>
	<button ng-click="ChangeShow('detail')">switch to detail</button>
	<br/>	
	</div>
</body>
</html>

点击广告,支持我们为你提供更好的服务

HTML5现代家居装潢公司网站模板

现代时尚家具公司网站模板

html5 canvas进度条圆环图表统计动画特效

css+js实现的颜色渐变数字时钟动画特效

jQuery右端悬浮带返回顶部特效

js+css3抽奖转盘旋转点餐代码

css鼠标跟随文字模糊特效

响应式咖啡饮品宣传网站模板

有机水果蔬菜HTML5网站模板

HTML5 Canvas竖直流动线条背景动画特效

canvas炫酷鼠标移动文字粒子特效

html5 canvas彩色碎片组合球形旋转动画特效

响应式时尚单品在线商城网站模板

响应式太阳能能源公司网站模板

html5图标下拉搜索框自动匹配代码

HTML5数字产品服务公司网站模板

网页设计开发公司网站模板

html5 svg夜空中星星流星动画场景特效

中小型创意设计服务公司网站模板

小众时尚单品在线电子商务网站模板

点击广告,支持我们为你提供更好的服务
 工具推荐 更多»
点击广告,支持我们为你提供更好的服务