2013-04-30 6 views
9

इस के समान एक HTML संरचना को देखते हुए माता-पिता शरीर है, जैसा कि one मामले में, यह काम नहीं करता है और एक खाली सेट देता है।पहुँच पेरेंट तत्व (शरीर) के निर्देश के लिंक समारोह में

app.directive 'myDirective', -> 
    (scope,iElement,iAttrs) -> 
     console.log iElement.parent() 

संपादित करें: इस समस्या के लिए मेरा अनुमान है कि मेरे ऐप की शरीर क्लाइंट की तरफ गाया और मॉड्यूल के रन पद्धति पर शरीर तत्व के साथ जोड़ दिया जाता है। एचटीएमएल $('body').html($compile(body.render())($rootScope)); के साथ डाला गया है और मुझे लगता है कि सामग्री में सामग्री डालने से पहले $ संकलन समारोह के भीतर निर्देश कहा जाता है। क्या मैं इस समस्या के आसपास काम कर सकता हूं?

+3

अपेक्षा के अनुरूप काम करने के लिए लगता है: http://jsfiddle.net/mTNvq/ – Langdon

+0

कि अजीब है , अब मुझे कुछ संकेत हैं कि समस्या क्या हो सकती है। – olanod

+2

[$ evalAsync] का उपयोग करने का प्रयास करें (http://docs.angularjs.org/api/ng.$rootScope.Scope#$evalAsync) (कोणीय पाचन चक्र के बाद निष्पादित करता है, इसलिए कोणीय डोम मैनिप्लेशंस के बाद, लेकिन ब्राउज़र प्रस्तुत करने से पहले) या [ $ टाइमआउट] (http://docs.angularjs.org/api/ng.$timeout) (ब्राउज़र रेंडर के बाद निष्पादित) आपके लिंक फ़ंक्शन में। –

उत्तर

0

वास्तव में आप अपनी समस्या को सही ढंग से समझ चुके हैं: $compile टेम्पलेट संकलन को ट्रिगर करेगा और आपके तत्व पर चरणों को लिंक करेगा, इसलिए ऐसा करने पर इसका कोई अभिभावक नहीं है।

इसे ठीक करने का आसान तरीका है कि पहले अपने एचटीएमएल को शरीर में संलग्न करें, और फिर संकलित करें।

var html = body.render(); 
$('body').html(html); 
$compile(angular.element(body))($rootScope); 

या यदि आप पूरे शरीर लेकिन सिर्फ नए तत्व संकलित करने के लिए नहीं करना चाहती:

var elem = $(body.render()).appendTo($('body')); 
$compile(elem)($rootScope); 
संबंधित मुद्दे