2014-11-19 6 views
7

मैं कई मार्गों के लिए एकाधिक नियंत्रकों है:कैसे एकाधिक नियंत्रकों में एक समारोह का पुन: उपयोग करने के लिए

app.controller('FirstController', function ($scope) { 
    $scope.func = function() { 
    console.log('route 1'); 
    } 
} 
app.controller('SecondController', function ($scope) { 
    $scope.func = function() { 
    console.log('route 2'); 
    } 
} 
... 

और एक निर्देश $scope.func का उपयोग करता है, इस तरह से:

app.directive('thedirective', function() { 
    return { 
    link: function (scope, $element, attrs) { 
     $scope.func(attrs.thedirective); 
    } 
    } 
}); 

$scope.func प्रत्येक नियंत्रक में अलग है । मैं $ scope.func को रूट 1 में लॉग इन करने के लिए "रूट 1" लॉग करने की अपेक्षा करता हूं और फर्स्ट कंट्रोलर वर्तमान नियंत्रक है और रूट 2 में "रूट 2" लॉग इन करने के लिए, लेकिन केवल "रूट 1" मुझे कंसोल में मिलता है। क्या आप कृपया मुझे बताएं कि क्यों बदलते मार्ग निर्देश के $ दायरे को नहीं बदलते हैं?

+0

शायद मेरा समाधान आपकी मदद कर सकता है? http://stackoverflow.com/questions/26921071/initialize-scope-variables-for-multiple-controllers-angularjs/26921599#26921599 – arman1991

उत्तर

2

पृथक स्कोप क्या मैं एक समारोह जो अलग ढंग से परिभाषित किया गया है एकाधिक नियंत्रकों है पुन: उपयोग के लिए इस्तेमाल किया गया था।
डॉक्स के अनुसार, जब आप की तरह के निर्देशों के दायरे को अलग:

scope: { 
    myIsolatedFunc: '=' 
} 

कोणीय तत्व की myIsolatedFunc संपत्ति के मूल्य के रूप में नामित एक संपत्ति के लिए वर्तमान क्षेत्र अप दिखेगा। जिसका अर्थ है कि:

एक समारोह $scope.func1 नामित अगर आप की है और एक तत्व के रूप में परिभाषित किया गया:

:

<div myIsolatedFunc="func1"> 

और एक अन्य मार्ग में एक और नियंत्रक के साथ एक तत्व के साथ $scope.func2 की तरह एक समारोह के रूप में परिभाषित किया गया

<div myIsolatedFunc="func2"> 

आप निर्देश में दोनों कार्यों का उपयोग कर सकते हैं:

app.directive('thedirective', function() { 
    return { 
    scope: { 
     myIsolatedFunc: '=' 
    }, 
    link: function (scope, $element, attrs) { 
     $scope.myIsolatedFunc(attrs.thedirective); 
    } 
    } 
}); 

उल्लेख नहीं है कि विभिन्न कार्यों के लिए अलग-अलग नाम रखने की आवश्यकता नहीं है।

+0

उत्तर देने में देरी के लिए खेद है। – Reyraa

5

AngularJS में यदि नियंत्रकों में फ़ंक्शन का उपयोग सामान्य रूप से किया जा रहा है।

सर्वोत्तम अभ्यास सेवा या कारखाने का उपयोग होता है जो नियंत्रक को इंजेक्ट करेगा।

app.factory('commonService', function ($scope) { 
    var obj= {}; 
     obj.func = function() { 
     console.log('route 1'); 
     } 
    obj.func1 = function() { 
     console.log('route 2'); 
     } 
    return obj; 
    } 
    app.controller('FirstController', function ($scope,commonService) { 
     console.log('route 1' + commonService.func()); 
    } 
    app.controller('SecondController', function ($scope,commonService) { 
     console.log('route 2' + commonService.func1()); 
    } 

और जब हम निर्देश के बारे में बात करते हैं, के निर्देश के दायरे एक नियंत्रक या तो निर्देश नियंत्रक या बाहर नियंत्रक है जो हम परिभाषित के साथ किया जाएगा।

<div ng-controller="firstController"> 
<your-directive /> 
</div> 

<div ng-controller="secondController"> 
<your-directive /> 
</div> 
+0

क्या होगा यदि फ़ंक्शन को स्कोप के साथ कुछ करने की आवश्यकता है? क्या सिर्फ '$ स्कोप' को तर्क के रूप में पास करना ठीक है? – leitasat

+0

$ गुंजाइश महंगा है इसे नियंत्रक में उपयोग किया जाना चाहिए। यदि आपको लगता है कि फ़ंक्शन को स्कोप मान की आवश्यकता है, तो सुनिश्चित करें कि आप सेवा को पैरामीटर भेजते हैं $ scope.testData। कोणीय 1.4 और उससे ऊपर में इस वस्तु को और अधिक गुंजाइश नहीं है। –

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