AngularJs 问题总结

一、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个
  1. 修改slideChanged方法

     $scope.slideChanged = function(index) {  
         $scope.slideIndex = index;  
         if ( ($ionicSlideBoxDelegate.count() -1 ) == index ) {  
             $timeout(function(){  
                 $ionicSlideBoxDelegate.slide(0);  
             },3000);  
         }  
     };
    

在数据为2的时候手动调用 $ionicSlideBoxDelegate.slide(0) 跳转到第一个

  1. 修改源码

     $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之间的通信
  1. 作用域继承。利用子Controller控制父 Controller 上的数据。(父 Controller中的数据要为引用类型,不能是基本类型)这同时也说明了为什么ng-if会产生数据绑定不成功的原因。

  2. 注入服务。把需要共享的数据注册为一个 service(通过service可以生成一个单例对象或通过factory生成一个function)在需要的Controller中注入。

  3. 基于事件。利用Angular的事件机制,使用 $on$emit$boardcast.$broadcast 会把事件广播给所有子 Controller,而 $emit 则会将事件冒泡传递给父 Controller$on 则是 Angular 的事件监听函数.

  4. $rootScope。每个Angular应用默认有一个根作用域 $rootScope, 根作用域位于最顶层,从它往下挂着各级作用域。

Factory、Service、Provider
AngularJs作用域

更新中。。。。。。

你可能感兴趣的:(AngularJs 问题总结)