2013-08-28 15 views
8

(1) मेरे पास portlet नामक एक निष्कासन निर्देश है जो इसकी सामग्री लेता है और इसे कुछ बॉयलरप्लेट कोड में लपेटता है। उदाहरण के लिए:कोणीयजेएस: एकाधिक निर्देशों को कैसे स्थानांतरित करें?

<div class="portlet"> 
    <div class="icon"></div> 
    <div class="content" ng-transclude="">   
    </div> 
</div> 

और हो जाता है::

<portlet> 
    <div class="foobar">My content</div> 
</portlet> 

portlet के टेम्पलेट, जो माध्यम से चला जाता

<div class="portlet"> 
    <div class="icon"></div> 
    <div class="content"> 
     <div class="foobar">My content</div> <!--the original content 
             passed to portlet--> 
    </div> 

(2) मैं दो अधिक ऐसे निर्देश, dyn-form और dyn-form-field है । इस तरह से वर्णित:

<dyn-form> 
    <dyn-form-field type="textbox" placeholder="..." label="Name" /> 
    <! ...and so on... --> 
</dyn> 

dyn-form के टेम्पलेट:

<form class="..." ng-transclude=""> 
</form> 

प्रत्येक dyn-field के टेम्पलेट इसके लिए लेबल/क्षेत्रों के उत्पादन के लिए एचटीएमएल उत्पन्न करता है। तो मूल कोड कुछ इस तरह में अनुवाद किया जाता है:

<form class="..."> 
    <label>Name: <input type="text" placeholder="..." /></label> 
    <!- ....and so on... --> 
</form> 

(3) यहाँ समस्या है। मैं प्रत्येक फॉर्म के ऊपर दिखाए गए कुछ बटन प्रदर्शित करने के लिए बॉयलरप्लेट कोड उत्पन्न करने के लिए एक 3 जी निर्देश, dyn-form-portlet का उपयोग करना चाहता हूं, फिर एक पोर्टलेट दिखाएं, और पोर्टलेट के अंदर dyn-form डालें।

<dyn-form-portlet> 
    <dyn-form> 
    <dyn-form-field /> 
    </dyn-form> 
</dyn-form-portlet> 

dyn-form-portlet के टेम्पलेट इस तरह दिखता है:: यह कैसे मैं यह करने के लिए कोशिश कर रहा हूँ है

<div class="dyn-form-portlet"> 
    <button>Foo</button> 
    <button>Bar</button> 
    <portlet ng-transclude=""> 
    </portlet> 
</div>  

Theoratically इस काम करना चाहिए, यानी <dyn-form><dyn-form> अंदर <portlet> अंदर रखा जाना चाहिए, <dyn-form-field> रों , और इसी तरह। लेकिन जब मैं इसे चलाता हूं, तो मुझे केवल dyn-form-portlet द्वारा प्रदर्शित बटन और portlet के लिए कोड दिखाई देता है, लेकिन portlet खाली है और इसमें फॉर्म प्रदर्शित नहीं किया जा रहा है।

क्या मैं कुछ गलत कर रहा हूं, या यह एक बग है?

+1

कोई दिलचस्पी है यदि कोई दिलचस्पी लेता है: http://plnkr.co/edit/FUYCQbw8Tnx3Qhcj4108?p=preview यदि आप ट्रांसफर को हटाते हैं: पोर्टल से सच है, यह काम करता है लेकिन मुझे निहितार्थों का यकीन नहीं है। –

+1

यहां मुझे विश्वास है कि यह हो रहा है। 'Dyn-form-portlet' टेम्पलेट के अंदर' 'निर्देश निर्देशक से पहले कोणीय द्वारा संकलित किया गया है, इसलिए जब' dyn-form-portlet' संसाधित हो जाता है, तो इसके टेम्पलेट के भीतर 'पोर्टलेट' टैग पहले से ही प्रस्तुत किया जा चुका है। इस [प्लंकर] पर एक नज़र डालें (http://plnkr.co/edit/szuDxjGPB8id2yrto7zM?p=preview) और कंसोल आउटपुट देखें। यह नहीं पता कि यह एक बग है या इस तरह के मामले में केवल कोणीय प्राकृतिक व्यवहार है। –

+0

@ माइकलबेनफोर्ड वास्तव में ऐसा लगता है कि ऐसा हो रहा है, हालांकि यह एक बग की तरह लगता है। मेरा मतलब है, 'dyn-form' के अंदर सभी उप-निर्देश 'dyn-form' में स्थानांतरित हो गए हैं, तो यह 'dyn-form-portlet' और' dyn-form' के लिए अलग क्यों होना चाहिए? क्या कोई इसे AngularJS टीम को बग के रूप में रिपोर्ट कर सकता है? –

उत्तर

5

मैंने इसे ठीक करने में कामयाब रहा है। मैंने replace : trueportlet निर्देश पर transclude : 'element' का उपयोग किया और मैंने इसे अन्य निर्देशों से priority दिया है। जिस कारण से मैंने ऐसा किया है, वह एंग्लर आंतरिक कार्यकलापों के गहरे ज्ञान की तुलना में महसूस कर रहा है।

पहले भाग transclude : 'element' बारे में प्रयोग किया जाता है क्योंकि

'तत्व' - कम प्राथमिकता में परिभाषित किसी भी निर्देशों सहित पूरे तत्व transclude।

प्रतिस्थापन का उपयोग किया जाता है क्योंकि मैंने जो देखा है उससे यह हमेशा प्रयोग किया जाता है जब तत्व को स्थानांतरित किया जाता है। प्राथमिकता मेरा झटका था।

यहाँ plnkr http://plnkr.co/edit/axQ90dHOLmLNeNQ4ZlNl?p=preview

यह शायद इस सवाल का जवाब आप के लिए देख रहे थे नहीं है, लेकिन मैं कोणीय निर्देशों में गहराई से देखने के लिए वास्तव में समझने के लिए क्या हो रहा है की आवश्यकता होगी है। वैसे भी, यह एक बग नहीं है, यह सिर्फ खराब दस्तावेज है।

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