2014-07-01 8 views
6

मैं कोणीय निर्देशों के लिए काफी नया हूं, और मुझे यह करने में बहुत परेशानी हो रही है जो मैं चाहता हूं। यहाँ की मूल बातें है कि मैं क्या है:एंगुलरजेएस निर्देश: टेम्पलेट के भीतर मूल दायरे से कॉल विधि

नियंत्रक:

controller('profileCtrl', function($scope) { 
    $scope.editing = { 
    'section1': false, 
    'section2': false 
    } 
    $scope.updateProfile = function() {}; 
    $scope.cancelProfile = function() {}; 
}); 

निर्देशक:

directive('editButton', function() { 
    return { 
    restrict: 'E', 
    templateUrl: 'editbutton.tpl.html', 
    scope: { 
     editModel: '=ngEdit' 
    } 
    }; 
}); 

टेम्पलेट (editbutton.tpl.html):

<button 
    ng-show="!editModel" 
    ng-click="editModel=true"></button> 
<button 
    ng-show="editModel" 
    ng-click="updateProfile(); editModel=false"></button> 
<button 
    ng-show="editModel" 
    ng-click="cancelProfile(); editModel=false"></button> 

HTML:

<edit-button ng-edit="editing.section1"></edit-button> 

यदि यह स्पष्ट नहीं है, तो मैं <edit-button> टैग को तीन अलग-अलग बटनों के साथ रखना चाहता हूं, प्रत्येक जो भी स्कोप संपत्ति ng-edit में पारित हो जाती है। क्लिक करने पर, उन्हें उस संपत्ति को बदलना चाहिए और फिर उपयुक्त स्कोप विधि को कॉल करना चाहिए।

जिस तरह से यह अब, बटन पर क्लिक सही ढंग से $scope.editing के मूल्यों में परिवर्तन है, लेकिन updateProfile और cancelProfile तरीकों काम नहीं करते। मैं निर्देशों का सही तरीके से उपयोग करने के आधार पर आधार से दूर हो सकता हूं, लेकिन मुझे जो कुछ करने की कोशिश कर रहा है उसे पूरा करने में मेरी सहायता के लिए मुझे ऑनलाइन उदाहरण खोजने में परेशानी हो रही है। किसी भी सहायता की सराहना की जाएगी।

उत्तर

15

एक तरीका $parent का उपयोग करके कार्यों को कॉल करना होगा।

app.directive('editButton', function() { 
    return { 
    restrict: 'E', 
    templateUrl: 'editbutton.tpl.html', 
    scope: { 
     editModel: '=ngEdit', 
     updateProfile: '&', 
     cancelProfile: '&' 
    } 
    }; 
}); 

तो फिर तुम में कार्य पारित:

<button ng-show="editModel" ng-click="$parent.cancelProfile(); editModel=false">b3</button> 

Demo

एक और तरीका है (और शायद बेहतर तरीका), उन नियंत्रक कार्यों के संदर्भ हो करने के लिए अपने निर्देश के अलग गुंजाइश कॉन्फ़िगर करने के लिए है एचटीएमएल के माध्यम से:

<edit-button ng-edit="editing.section1" update-profile='updateProfile()' cancel-profile='cancelProfile()'></edit-button> 

Demo

+0

ग्रेट, धन्यवाद। मैं आपके पहले उदाहरण का उपयोग करने के इच्छुक हूं, क्योंकि दोनों विधियां हमेशा निर्देशों में समान होंगी और यह बाहरी HTML को कम कर देगी। आप क्या कहते हैं कि दूसरा तरीका "बेहतर तरीका" है? –

+1

@futurityverb, दूसरी विधि अधिक सामान्य है। यदि आप निर्देश के उदाहरण को थोड़ा अलग व्यवहार के साथ चाहते हैं, तो आप बस एक अलग विधि में गुजर सकते हैं जिसे बुलाया जाना चाहिए। साथ ही, यदि आप अन्य निर्देशों के अंदर अपना निर्देश घोंसला शुरू करते हैं, तो '$ parent' अब नियंत्रक के दायरे को संदर्भित नहीं कर सकता है, लेकिन कुछ अन्य मध्यस्थता का दायरा भी देख सकता है। – Jerrad

+1

मुझे सही दिशा में धक्का दिया, लेकिन क्या होगा यदि मैं आपके दूसरे उदाहरण का उपयोग करके विधियों को तर्क देना चाहता हूं? –

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