2015-05-16 9 views
5

मैं इसक्लिक करने से कई बार

तरह कोणीय ui टैब का उपयोग कर 15 टैब इस टेम्पलेट

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

है इस नियंत्रक

है
$scope.activeTabDate = ''; 

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

}; 

अब यह मेरा प्रविष्टियों के लिए बाल नियंत्रक

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

मेरे पास पृष्ठ पर 15 टैब हैं। मेरी समस्या हर बार मैं टैब पर क्लिक करता हूं। Console.log में मुझे एक के बजाय 15 प्रविष्टियां मिलती हैं। वह

+0

आप मैन्युअल रूप से प्रत्येक टैब में नियंत्रक आयात करते हैं? ऐसा लगता है कि घड़ी 15 बार –

+0

दोहराती है मैंने पोस्ट किया जो मुझे लगता है कि पूरे समाधान का हिस्सा है। वैसे भी, ऐसा करने पर मुझे यकीन नहीं है कि क्या आप घड़ी को दोहराएंगे और फिर इसे 15 बार फिर से चलाएंगे। क्या आपने घड़ी को मुख्य नियंत्रक में रखने की कोशिश की? घड़ी बाध्यकारी मुझे लगता है कि 15 बार दोहराएगा .. http://thenittygritty.co/angularjs-pitfalls-using-scopes -> Pitfall # 1 –

उत्तर

3

अपनी प्रविष्टियों से मैन्युअल आयात को निकालें और div में ng-controller का उपयोग करें जिसमें प्रविष्टियां.html शामिल हैं। फिर, मुझे लगता है कि आप बच्चे को नियंत्रक में $ scope.parent उपयोग करने के लिए, गुंजाइश के रूप में मुख्य एक

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

संपादित आप प्रत्येक टैब नियंत्रक से घड़ी को क्रियान्वित कर रहे हैं के रूप में ही किया जाएगा की जरूरत नहीं होगी वैसे भी मेरे पहले बदलाव के साथ भी।

इस तरह नियंत्रक टैबसेट के सभी बाल तत्वों को नियंत्रित करेगा और उसी $ स्कोप को साझा करेगा।

<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

संबंधित मुद्दे