2013-04-21 24 views
6

Merhaba ben sonraki sorun var gelen çağrı fonksiyonu:Açısal: view

Bence ben bir işlevi prepareDynamicData (itemMenu) diyoruz;

<div ng-repeat="itemMenu in menuDetailsData.categories" class="headDetails fontH2"> 
      <div style="display: none">{{prepareDynamicData(itemMenu)}}</div> 
      <a href="#" ng-show="dynamicData.expand">{{itemMenu.name}}</a> 
      <div ng-repeat="cat in dynamicData.data"> 
       <p>{{cat.name}}</p> 
       <div class="articles"> 
        <div ng-repeat="art in cat.items" class="article"> 
         <div class="price"> 
          <div></div> 
          <span><i>₪</i>{{art.price}}</span> 
         </div> 
         <div class="artDescr"> 
          <span class="fontTitle">{{art.title}}</span> 
          <p class="fontDetails">{{art.description}}</p> 
         </div> 
        </div> 
       </div> 
      </div> 
     </div> 

ben üst döngü (doğruladıktan) sadece 2 kez yinelenmesi biliyorum, ama işlevi prepareDynamicData (itemMenu) 4 kez aradığını, neden bilmiyorum !? İşte benim denetleyicisi geçerli:

function MenuItemCtrl($scope, $routeParams, $http, $location, sharedData) { 
if (sharedData.getMenuDetails() == null) { 
    $location.path('/menu'); 
    return; 
} 
else { 
    $scope.menu = sharedData.getMenu(); 
    $scope.menuDetailsData = sharedData.getMenuDetailsData($routeParams.itemId); 
} 

$scope.dynamicData = { 
    data : new Array(), 
    expand : false 
}; 

$scope.prepareDynamicData = function (itemMenu) { 
    if (itemMenu.items != null) { 
     $scope.dynamicData.data[0] = itemMenu; 
     $scope.dynamicData.expand = false; 
    } 
    else { 
     $scope.dynamicData.data = itemMenu.categories; 
     $scope.dynamicData.expand = true; 
    } 
} 

}

bunu oluyor bana neden netleştirmeye yardımcı olabilir! teşekkürler

cevap

9

AngularJS, görünümün güncel kaldığından emin olmak için kirli izlemeyi kullanır. Yani AngularJS, görüşünüzün bağlanma değerlerini sabitleşene kadar değerlendirecektir; Bu nedenle, her zaman bağlamanın ilişkili kapsam güncellemelerini her bağlandığında en az iki kez yapar. (Örneğin, döngüye dahil olan belirli bir öğe değiştiyse, muhtemelen iki kez daha eklenir.) Bu nedenle, görünümde bağlı işlevlerin hiçbir yan etkisi olmadığından ve hızlı bir şekilde çalıştırıldığından emin olmak için dikkatli olunmalıdır. Genel olarak, veri hazırlama görevlerini, denetleyici yüklendiğinde veya denetleyiciden çağrılan bir hizmette çalışan kod içinde hareket ettirmek iyi bir uygulamadır - ilgili bir kod, nadiren yan etkilere sahip olmalıdır! Ancak, gerçekten de bu gibi bir işlevi görünümden çağırmak zorundaysanız, işlev verilen öğeye önceden çağrılmış olup olmadığını izlemeniz yeterlidir. Bu bir additional reading on dirty tracking in Angular if you're interested bitidir.