一、ng-if/ng-show
最根本的区别是页面是否会生成此DOM元素
二、ng-repeat迭代数组的时候,如果数组中有相同值,会有什么问题,如何解决?
会提示
Duplicates in a repeater are not allowed.
,数据与DOM之间一对一的关系在数据相同的情况下不成立。通过track by key
key
为数组的唯一标识,目的是建立数组与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作用域