5

नहीं चलाएगा मेरे पास एक कस्टम निर्देश myDirective है जो किसी तत्व पर कार्य करता है। मेरी $http अनुरोध लोड किए गए हैं के बाद http://jsfiddle.net/hGnvv/ केवल ng-if हालत सच में बदल जाता है:एनजी-डी के भीतर एंगुलरजेएस निर्देश

मैं

<div ng-if="condition"> 
    <div my-directive></div> 
</div> 

कुछ इस बेला की तरह एक ng-if ब्लॉक में इस निर्देश की है।

निर्देश शायद रनटाइम के दौरान संकलित किया गया है, लेकिन कभी भी लिंक नहीं किया गया है, इसलिए कोड कभी नहीं चलता है। यदि मैं ng-if को ng-show से प्रतिस्थापित करता हूं तो निर्देश ठीक काम करता है।

कोई समाधान?

संपादित करें: मैं ng-show का उपयोग नहीं कर सकता क्योंकि मेरे पास फॉर्म के भीतर 130 निर्देश हैं। 20 निर्देश वैसे भी चलते हैं, और दूसरा मेरे ऑब्जेक्ट प्रकार के अनुसार चलता है।

  • ng-if="type == 1" तो इन तत्वों
  • ng-if="type == 2" लोड अगर मैं ng-show को ng-if बदल तो अन्य तत्वों आदि

लोड, प्रपत्र 1s के बजाय लोड करने के लिए 8s लेता है।

+4

के लिए वस्तु संपत्ति का उपयोग करना चाहिए आपके पास पहले से ही एक समाधान है।Ng-show – nikhil

+0

के साथ ng-show को बदलें, मैं ऐसा नहीं कर सकता, मुझे एक ही रूप में 130 निर्देश पसंद हैं। अगर मैं ng-show को ng-show के साथ प्रतिस्थापित करता हूं, तो यह सभी कोड जो चलाना है, फ़ॉर्म को बहुत धीमा कर देता है (~ 1s के बजाय 8s)। –

+2

यदि संभव हो तो एनजी-शो का उपयोग करें। एनजी- अगर डोम से तत्व हटा देता है, तो कोणीय को संकलित करने का कोई तरीका नहीं है। –

उत्तर

2

मुद्दा यह नहीं था कि निर्देश नहीं चल रहा था, लेकिन $watch फ़ंक्शंस जो मेरे अंदर था, बिल्कुल नहीं चला। मैंने इस मुद्दे के सटीक कारण को समझने में कामयाब नहीं रहा, क्योंकि एक ही निर्देश ng-if के बाहर ठीक काम करता है।

वैसे भी मेरे $watch को ->$watchCollection में बदल दिया गया है और यह अब ठीक काम करता है, क्योंकि यह उन वस्तुओं के सभी अपडेट देखता है जिन्हें मैं देख रहा हूं।

2

ng-if स्थिति प्रारंभ में गलत है, इसलिए तत्व डीओएम में मौजूद नहीं है और निर्देश लिंक नहीं किया गया था।

जब एनजी-अगर हालत बाद में true हो जाता है, लिंक कॉलबैक सही ढंग से सक्रिय किया जाना चाहिए, के रूप में इन उदाहरणों में देखी गई:

सत्य पर ng-if स्थापना बटन क्लिक होने: http://jsfiddle.net/q05gret0/

के बाद सही पर ng-if स्थापना $http अनुरोध लोड किया गया है: http://jsfiddle.net/fhu8ky62/1/

यदि आपको यह व्यवहार नहीं मिल रहा है, तो समस्या विरासत के दायरे के साथ हो सकती है; ng-if जांचें उसी स्कोप चर की निगरानी कर रहा है कि आपका अनुरोध अपडेट कर रहा है। This article में माता-पिता/बच्चे के दायरे चरम छायांकन और अन्य सीमाओं पर कुछ बिंदु हैं।

+0

मैं कोड को चलाने के लिए चाहता हूं जब ng-if स्थिति सत्य हो जाती है। मुद्दा यह है कि जब यह सच हो जाता है, तो निर्देश का लिंक नहीं चलता है। –

+0

आह अब मैं समझता हूं, मेरा उत्तर संपादित करेगा – seanhodges

+0

सहायता के लिए धन्यवाद, यह मुद्दा नहीं था। मैं इसे खोजने में कामयाब रहा, इसे नीचे एक और जवाब में पोस्ट किया। –

0
उदाहरण के लिए

अपने मॉडल $scope.item = true की तरह है और आप ng-if="item" की तरह उपयोग आप $scope.myvalue = {} करने के लिए अपने मॉडल बदल सकते हैं और इस तरह का प्रयोग करना चाहिए, यदि: ng-if="myvalue.item", सभी में मेरा मतलब है आप ng-if नहीं एक साधारण मूल्य

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