2013-01-10 6 views
9

ng-click अलर्ट प्रदान नहीं कर रहा है। जब निर्देश का आंतरिक टेम्पलेट क्लिक किया जाता है तो अलर्ट बॉक्स नहीं दिखाया जाता है।निर्देश के आंतरिक टेम्पलेट में एनजी-क्लिक कार्यक्षमता प्रदान नहीं कर रहा है

बेला लिंक यहाँ है: http://jsfiddle.net/NNDhX/

+1

मैं उन प्रश्नों को भी नहीं देखता जहां उन्होंने प्रश्न में इनलाइन पोस्ट करने के लिए कुछ परेशान नहीं किया। – jpsimons

उत्तर

16

आपका निर्देश का अपना अलग गुंजाइश है। तो 'हाय' फ़ंक्शन को निर्देश के दायरे में होना चाहिए। यदि आप अपने कंट्रोलर के फ़ंक्शन को पास करना चाहते हैं तो आपको बाध्यकारी करना चाहिए, जैसे scope: { ..., hi: '&' } और फिर <you-directive hi='hi' ..>। यहां इस बारे में दस्तावेज़ीकरण का एक लिंक दिया गया है: Understanding Transclusion and Scopes

तो बस समारोह को जोड़ने में इसे जोड़ने के लिए पर्याप्त है:

link: function(scope, element, attrs) { 
    scope.hi = function() { alert("hi"); } 

यहाँ बेला अद्यतन किया जाता है: http://jsfiddle.net/GwBAh/

+0

आपके समाधान वैलेंटाइन श्याबानोव के लिए धन्यवाद लेकिन मैं नियंत्रक में हाय() फ़ंक्शन को कॉल करना चाहता हूं ...कृपया इस पहेली को अपडेट करें – user1966260

+1

मैंने नियंत्रक से हाय को कॉल करने के तरीके का उल्लेख किया है: निर्देश की स्कोप संपत्ति अपडेट करें और अपने नियंत्रक फ़ंक्शन से जुड़ें। इस समाधान के साथ बेवकूफ: http://jsfiddle.net/GwBAh/1/ मत भूलना: निर्देशक दायरा अलग है, इसलिए आप बाइंडिंग या ट्रांसक्यूलेशन का उपयोग करके इस दायरे में कुछ कर सकते हैं या पारित कर सकते हैं - स्थानांतरित स्कॉप्स भाई बहन हैं और नहीं हैं पृथक। –

+0

@ValentynShybanov आपको भविष्य में पाठकों को कुछ समय बचाने के जवाब में उस पहेली को रखना चाहिए। :) और कोणीय को 'स्कोप: {func:' & '}' जैसी अनजान सामग्री टाइप करने से आसान बनाना चाहिए! – Langdon

1

अलग कार्यक्षेत्रों के पूरे विचार से बचने के लिए माता-पिता के बीच < बातें 'साझा करने' ठीक है -> बच्चे के क्षेत्र, किसी भी तरह से उन्हें प्रकट होने से बचाने और (अनजाने में) अन्य निर्देश/नियंत्रकों द्वारा बदला गया।

transclude: true, 
/*scope: { title:'@zippyTitle' },*/ 

फिर जगह: निर्देश की गुंजाइश परिभाषा (नीचे टिप्पणी की) को हटाने के द्वारा

प्रारंभ:

तुम सच में अलग दायरे से बचने के लिए और माता पिता की गुंजाइश का हिस्सा चाहते हैं, यह कोशिश विशेषताएं (attrs) के निर्देश के तत्व से निर्देशों 'गुंजाइश पर:

scope.attrs = attrs; 

नोट: ऐसा करके attrs संपत्ति माता-पिता (Ctrl3) दायरे पर भी उपलब्ध होगी।

और अंत में scope.attrs

template: '<div>' + 
       '<div class="title">{{attrs.zippyTitle}}</div>' + 
       '<div class="body" ng-transclude></div>' + 
         '<a ng-click="hi();">hi</a>' + 
      '</div>', 

jsFiddle के आधार पर शीर्षक को परिभाषित: http://jsfiddle.net/NNDhX/1/

+0

अच्छा विकल्प, लेकिन ओवरराइटिंग स्कोप की अटारी संपत्ति एक हैक की तरह दिखती है। मैं कल्पना कर सकता हूं कि यह आपको परेशानी में डाल सकता है (विशेष रूप से यदि आप किसी के पीछे आ रहे हैं जो इसे करता है)। ऐसा लगता है कि यह अधिक स्पष्ट होना बेहतर हो सकता है। – Langdon

5

अगर यह सबसे अच्छा तरीका है मैं नहीं जानता, लेकिन आप का उपयोग करने के निर्देश में $ माता-पिता का उपयोग कर सकते अभिभावक दायरा एक निर्देश के अंदर http://jsfiddle.net/EKDse/

0

नियंत्रक समारोह transcluded ब्लॉक के भीतर बुलाया जाना चाहिए:

<a ng-click="$parent.hi();">parent</a> 

यहाँ पूर्ण बेला उदाहरण के लिए लिंक है। निर्देश के टेम्पलेट के अंदर नियंत्रक विधि का उपयोग करना आपका निर्देश नियंत्रक पर निर्भर करता है और इसके अवशेषों (निर्देशक-बाहरी नियंत्रक) द्वारा एक अवांछित डिज़ाइन है।

अपने नमूने में <a> स्थानांतरित कोड में कोड का टुकड़ा traslate। इसने आपके निर्देश को और अलग किया और समस्या हल की:

<div class="zippy" zippy-title="Details: {{title}}..."> 
    {{text}} 
    <a ng-click="hi();">hi</a> 
</div> 
संबंधित मुद्दे