नल

2013-09-06 10 views
14

की संपत्ति '$$ अगली सिब्लिंग' नहीं पढ़ी जा सकती है जब मैं अपने स्वयं के क्षेत्रों को नष्ट करता हूं तो मैं अपने प्रोग्राम में यह त्रुटि प्राप्त करता रहता हूं। मैं इसे इस जबकि पाश करने के लिए नीचे ट्रैक किए गए कोणीय भीतर:नल

if (!(next = (current.$$childHead || (current !== target && current.$$nextSibling)))) { 
    while(current !== target && !(next = current.$$nextSibling)) { 
     current = current.$parent; 
    } 
} 

मैं भी एक jsFiddle में यह दोहराने में कामयाब है: http://jsfiddle.net/kEyqz/1/

यह एक तत्व मैं एक क्लिक के ऊपर तार पर, स्थापित करने के लिए बहुत आसान है घटना और उसके बाद $ प्रसारण किया गया था जिसके बाद इसे $ लागू किया गया था।

एक अलग निर्देश (एक बच्चे के दायरे के साथ) में मैं उस घटना में सुनता हूं, और यदि मैं इसे देखता हूं, तो मैं बच्चे के दायरे को नष्ट कर देता हूं। ऐसा करने से त्रुटि उत्पन्न होती है:

Uncaught TypeError: Cannot read property '$$nextSibling' of null 

यह मेरे कोड में पूरा करने का प्रयास करने का एक छोटा सा उदाहरण है।

कंसोल वर्तमान = वर्तमान से ठीक पहले लॉगिंग कर रहा है। $ पैरेंट के परिणाम में कोई $ माता-पिता नहीं है (यह शून्य पर सेट है)। । वर्तमान = वर्तमान $ माता-पिता के बाद

if(!current){ 
    break; 
} 

, लेकिन मैं इसे बनाए रखने के लिए अगर मैं कोणीय संस्करणों (आदर्श नहीं)

+0

एक ज्ञात बग लगता है: https://github.com/angular/angular.js/issues/1627 –

+3

उस बग को 9 महीने पहले तय किया गया था और यह प्रश्न एक समस्या के बारे में है जो अभी भी वर्तमान कोणीय 1.0 के साथ होता है .8। – metamatt

+1

क्या आप इस समस्या को अपने स्वयं के क्षेत्रों को नष्ट कर रहे हैं जो आपने स्वयं बनाया है? आपके जेएसफ़िल्ड में उदाहरण एक दायरे को नष्ट कर रहा है कि कोणीय आपके निर्देश के लिए बनाया गया है। यदि मैं इसे बनाने के लिए बदलता हूं और फिर एक अलग दायरा को नष्ट करता हूं, तो मुझे यह समस्या दिखाई नहीं देती है। http://jsfiddle.net/kEyqz/2/ – metamatt

उत्तर

17

यह क्या है के लिए स्विच होगा:

मैं लाइनों को जोड़ सकते हैं आप http://jsfiddle.net/jw99Lj7t/ खोज रहे थे?

आप $destroy$scope durgin digest चक्र में थे - जो त्रुटि उत्पन्न कर रहा था।

मैं belive नहीं है कि यह एक bug है के बाद से यह कैसे digest चक्र कार्यान्वित किया जाता है है (यह $scopes जाँच की सूची पर लूप अगर कुछ बदल गया है, और हम उस सूची से स्कोप नहीं निकाल सकते के रूप में यह है "पहले से ही उपयोग में")।

इस समस्या को हल करने से कई जटिलताओं का परिचय मिल सकता है और digest बहुत तेज़ होना चाहिए, इसलिए आप जो काम कर रहे हैं उसके लिए एक अलग तरीका ढूंढना बेहतर है।

+0

यह एक अंतिम मामला रिसॉर्ट है। मेरे पास पहले से ही एक असफलता के रूप में कोड का टुकड़ा है। –

+1

@MathewBerg अंतिम मामला रिसॉर्ट, मुझे लगता है कि आपको यह एकमात्र रास्ता मिल जाएगा, मैं कई बार इस त्रुटि में आया हूं और वास्तविक समस्या यह है कि आपने दायरे को नष्ट कर दिया है लेकिन कोणीय अभी भी उस गुंजाइश के साथ काम कर रहा है और सोचता है अभी भी मौजूद है इसलिए इसकी जांच मूल्य। 'सेटटाइमआउट' एकमात्र तरीका है, यह सुनिश्चित करता है कि आप दायरे को नष्ट करने से पहले कोणीय समाप्त हो जाएं। आपके डेमो में @ g00fy आप 'setTimeout' का उपयोग कर रहे हैं लेकिन आपने इसे अपने कोड में कहीं भी नहीं बताया है, ** + 1 ** यदि आप करते हैं। – iConnor

+1

मेरा समाधान इसके बजाए $ टाइमआउट का उपयोग करता है, लेकिन मूल रूप से वही बात। –

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