Angular零星知识点(二)

四、ng-if、ng-show、ng-switch

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

简单总结:

ng-show和ng-hide只是显示或隐藏了DOM节点,节点依然会被加载渲染

ng-if与ng-show一样都是接收一个bool,但是当ng-if为false时,它控制的DOM节点不会被创建或者之前的DOM节点会被销毁,可加快DOM加载速度

ng-switch省去了tab选项卡时的麻烦,它监听一个变量,变量值为a时,a控制的DOM节点就会被创建显示,变量值为b时,a的DOM节点被销毁,b的DOM节点被创建

又发现了个问题,ng-if、ng-switch与ng-show的区别,还有一个,即ng-if与ng-switch会创建新的子作用域,所以在ng-if、ng-switch中用ng-mode时要注意加上$parent

参考:ng-if与ng-show、ng-hide指令的区别和注意事项Angularjs Scope 原型链

$scope是可以继承的,跟JavaScript的原型链相同

用ng-switch做了个小测试,结果一目了然:

<body ng-app="myapp" ng-controller="DemoCtrl" ng-switch="ShowMode">
    <div class="well span6" ng-switch-when="a">
		<input ng-model="$parent.showa"/>
    </div>   
    <div class="well span6" ng-switch-when="b">
       	<input ng-model="showb"/>
    </div>
    <div class="well span6" style="float:none;">     
    <button ng-click="ChangeShow('a')">switch to a</button>
    <button ng-click="ChangeShow('b')">switch to b</button>
    <br/>
    </div>
</body>
	 <script type="text/javascript">
		 var app=angular.module('myapp',[]);
      app.controller('DemoCtrl' ,function($scope){      
		  $scope.showa="123";
		    $scope.showb="234";
            $scope.ShowMode = "a";
            $scope.ChangeShow = function(ShowMode){
              if(ShowMode=='a'){
				 $scope.ShowMode='a'; 
				  console.log($scope.showa);
				 
			  }else{
				  $scope.ShowMode='b' ; 
				 console.log($scope.showb);
			  }
			}});
    </script>

  

  

五、ng-repeat track by

参考: angularjs: ng-repeat 如何实现嵌套?ng-repeat指令中使用track by子语句解决重复数据遍历的错误 

之前没有注意到这个问题,因为repeat的都是json格式的数据,而对于这种类型的数据,就算内容相同,也不会报错,恩,后来测试了一下,确实如此

但是当遍历数组时,如果数组中是数字或字符串等基本数据类型并有重复元素,就会报错

For example: item in items is equivalent to item in items track by $id(item). This implies that the DOM elements will be associated by item identity in the array.

此时他们的id就是他们自身的值,而ngRepeat不允许collection中存在两个相同id的对象

解决方法是定义track by表达式,即在item in data后面加上track  by item.id【业务上自己定义的id】或者track by $index【索引变量】

六、路由 ngRoute 和ui-route

参考: Angular系列文章之angular路由ngRoute VS ui-routerangular 系列八 ui-router详细介绍及ngRoute工具区别

简单总结:

angular中常用的就是这两种路由,之前看过ui-route,可惜项目里还是用的ngRoute

 ngRoute是angular内置的路由模块,但功能有限,ui-route是基于ngRoute开发的第三方路由模块,很受追捧

ui-route主要弥补了ngRoute在多视图和视图嵌套方面的不足

ngRoute是通过url来驱动视图,而ui-route则是通过状态state

ngRoute  和  ui-route 相比:

$route       —>   $state

$routeParams      —>  $stateParams

$routeProvider      —>  $stateProvider

<div ng-view></div>      —>  <div ui-view></div>

posted @ 2016-03-10 10:02  长安L  阅读(208)  评论(0编辑  收藏  举报