一、ng-if/ng-show
最根本的区别是页面是否会生成此DOM元素
二、ng-repeat迭代数组的时候,如果数组中有相同值,会有什么问题,如何解决?
会提示
Duplicates in a repeater are not allowed.,数据与DOM之间一对一的关系在数据相同的情况下不成立。通过track by keykey为数组的唯一标识,目的是建立数组与DOM的关联。
三、ionic ion-slide-box bug
ion-slide-box在数量为两个的情况下会造成 ion-slide的数量由2个变成4个
-
修改
slideChanged方法$scope.slideChanged = function(index) { $scope.slideIndex = index; if ( ($ionicSlideBoxDelegate.count() -1 ) == index ) { $timeout(function(){ $ionicSlideBoxDelegate.slide(0); },3000); } };
在数据为2的时候手动调用
$ionicSlideBoxDelegate.slide(0)跳转到第一个
-
修改源码
$scope.numSlides = function() { if (!slideBox._length){ slideBox._length = slideBox.slidesCount() || 0; } return new Array(slideBox._length); }; $scope.$watch('currentSlide', function(v) { selectPage(v%(slideBox.slidesCount()||0)); });
在
ionic.bundle.js的第63314行附近,修改以上两个方法。执行slideBox个数的取余操作
四、在Html页面调取JS原生方法(parseInt)失效?
在页面中,都不能直接调用原生的JS 方法,因为这些并不存在于与页面对应的Controller 的$scope 中
五、Controller之间的通信
作用域继承。利用子
Controller控制父Controller上的数据。(父Controller中的数据要为引用类型,不能是基本类型)这同时也说明了为什么ng-if会产生数据绑定不成功的原因。注入服务。把需要共享的数据注册为一个
service(通过service可以生成一个单例对象或通过factory生成一个function)在需要的Controller中注入。基于事件。利用
Angular的事件机制,使用$on、$emit和$boardcast.$broadcast会把事件广播给所有子Controller,而$emit则会将事件冒泡传递给父Controller,$on则是 Angular 的事件监听函数.
$rootScope。每个Angular应用默认有一个根作用域$rootScope, 根作用域位于最顶层,从它往下挂着各级作用域。
Factory、Service、Provider
AngularJs作用域