2015-05-16 10 views
5

Ho 15 schede che utilizzano schede di interfaccia utente angolari come questoCliccando su ui angolare evento incendi schede molte volte

Questo è modello

<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> 

Questo è un controllore

$scope.activeTabDate = ''; 

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

}; 

ora Questo è il mio controller figlio per entries.html

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

Ho 15 schede nella pagina. Il mio problema è ogni volta che clicco sulla scheda. In console.log ottengo 15 voci invece di una. Perché è

+0

Ti importare manualmente il controller in ogni scheda? Sembra che l'orologio ripeta 15 volte –

+0

Ho postato ciò che penso fa parte dell'intera soluzione. Ad ogni modo, quando lo fai non sono sicuro che ripeterò l'orologio e poi lo eseguirò 15 volte di nuovo. Hai provato a mettere l'orologio nel controller principale? la rilegatura dell'orologio verrà ripetuta 15 volte. Penso che .. http://thenittygritty.co/angularjs-pitfalls-using-scopes -> Pitfall # 1 –

risposta

3

Rimuovere l'importazione manuale dal file entries.html e utilizzare ng-controller nel div che include entries.html. Poi, penso che non sarà necessario utilizzare $ scope.parent nel controller del bambino, come il campo di applicazione sarà lo stesso come il principale

<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); 
    } 
}); 

EDIT si sta eseguendo l'orologio da ciascun controller scheda comunque anche con il mio primo cambio.

In questo modo il controller controllerà tutti gli elementi figlio del gruppo di tabelle e condividerà lo stesso $ scope.

<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