2015-05-16 27 views
5

Butıklamak defalarca

gibi açısal ui sekmeleri kullanarak 15 sekmeleri var Bu şablon

<tabset justified="true"> 
    <tab heading="{{ tab.display }}" 
     select="tsc.selectTab(tab.date)" 
     ng-repeat="tab in tsc.tabs"> 
     <div ng-include="'entries.html'"></div> 
    </tab> 
</tabset> 

olan bu

$scope.activeTabDate = ''; 

self.selectTab = function (tabDate) { 
    $scope.activeTabDate = tabDate; 

}; 

Şimdi Bu kontrolör

olduğunu benim için kullanıcı denetleyicisi

Sayfada 15 Sekme var. Sorunum her tıklama sekmesinde. Console.log içinde bir yerine 15 giriş olsun. Neden bu

+0

el her sekmede kontrolörü içe musunuz? Saatin 15 kez tekrarladığı görülüyor. –

+0

Tüm çözümün bir parçası olduğunu düşündüğüm şeyi yayınladım. Her neyse, bunu yaparken saati tekrar edip sonra tekrar 15 kez koşacağınızdan emin değilim. Saati ana kontrol ünitesine koymaya çalıştın mı? Saatin bağladığını düşünüyorum 15 kez tekrar ediyorum .. http://thenittygritty.co/angularjs-pitfalls-using-scopes -> Tuzak # 1 –

cevap

3

El ile içe aktarmalarınızı entries.html sayfasından kaldırın ve entries.html içeren divda ng denetleyicisini kullanın. Öyleyse, ben de kapsam Her sekme denetleyicisinden izlemek yürütme ana biri

<tabset justified="true"> 
    <tab heading="{{ tab.display }}" 
     select="tsc.selectTab(tab.date)" 
     ng-repeat="tab in tsc.tabs"> 
     <div ng-include="'entries.html'" ng-controller="yourchildcontroller"></div> 
    </tab> 
</tabset> 


$scope.$watch('activeTabDate', function (newValue, oldValue) { 
    if (newValue !== oldValue) { 
     console.log('--'+newValue); 
    } 
}); 

DÜZENLEME aynı olacaktır olarak, çocuk denetleyicisi $ scope.parent kullanmaya gerek olmayacak düşünüyorum yine de benim ilk değişikliğimle. Bu şekilde denetleyici, sekme öğesinin tüm alt öğelerini denetler ve aynı kapsamı paylaşır.

<tabset justified="true" ng-controller="yourchildcontroller"> 
<tab heading="{{ tab.display }}" 
select="tsc.selectTab(tab.date)" 
ng-repeat="tab in tsc.tabs"> 
<div ng-include="'entries.html'" ></div> 
</tab> 
</tabset> 


$scope.$watch('activeTabDate', function (newValue, oldValue) { 
    if (newValue !== oldValue) { 
    console.log('--'+newValue); 
    } 
}); 

https://docs.angularjs.org/api/ng/directive/ngController

İlgili konular