2016-02-19 4 views
13

मैं एक सरल निर्देशों का उपयोग कर रहा हूँ एक पाठ इनपुट ध्यान केंद्रित करने की जब तत्व *ngIf का उपयोग कर सक्रिय है। यह *ngFor लूप के भीतर निहित है।एक निर्जलित डिटेक्टर क्या है और मैं यहां एक का उपयोग कैसे कर रहा हूं?

जब पहली *ngIf सक्रिय होता है, इनपुट के रूप में उम्मीद केंद्रित है। जब अन्य इनपुट सक्रिय है मैं त्रुटि मिलती है:

EXCEPTION: Attempt to use a dehydrated detector.

मुझे समझ नहीं आता कि इसका क्या मतलब है और कैसे मैं त्रुटि रोका जा सकता है। कार्यक्षमता अभी भी त्रुटि के साथ काम करता है।

@Directive({ 
    selector: '[myAutoFocus]' 
}) 
export class AutoFocusDirective { 
    constructor(private elem: ElementRef) { 
     window.setTimeout(function() { 
      elem.nativeElement.querySelector('input').focus(); 
     }); 
    } 
} 

`` `

+0

का उपयोग कर मैं यह त्रुटि, मैं शायद समाधान कर लिया है यह आप में मदद करता है अगले टिक करने के लिए अपमानजनक कार्रवाई स्थगित http://stackoverflow.com है/प्रश्न/35952068/angular2-अपवाद-प्रयास करने के लिए पता लगाने-चा nges-on-a-dehydrated-detector –

उत्तर

12

सूखे डिटेक्टर, एक घटक है कि परिवर्तन का पता लगाने प्रणाली से हटा दिया गया है क्योंकि आम तौर पर यह *ngIf या अन्य means द्वारा डोम से अनमाउंट कर दिया गया है: अगर वहाँ आवेदन में एक अतुल्यकालिक कार्रवाई है कि यह पहले से ही अनमाउंट किया डिटेक्टर पर हिट करता है , त्रुटि thrown है: समाधान प्रभावित घटक पर [hidden] बजाय *ngIf उपयोग करें, या setTimeout(() => this.offendingAction(), 0)

+0

धन्यवाद थॉमस। इसे ठीक करने का प्रयास करने में घंटों खर्च करें। सेटटाइमआउट (() => this.offendingAction(), 0) सही काम करता है –

0

ए 'निर्जलित डिटेक्टर" इसका मतलब है कि घटक/निर्देश के लिए परिवर्तन डिटेक्टर नहीं रह हाइड्रेटेड है। (। क्षमा करें, मैं बस को रोक नहीं सकता है - मैं पता नहीं क्या इस त्रुटि या तो इसका मतलब है, और न ही मुझे पता है कि "हाइड्रेटेड" या "निर्जलित" संप्रेषित करने के लिए माना जाता है करते हैं)

यह source file का कहना है:

/** 
* Thrown when change detector executes on dehydrated view. 
* 
* This error indicates a bug in the framework. 
* 
* This is an internal Angular error. 
*/ 
export class DehydratedException extends BaseException { 
    constructor(details: string) { super(`Attempt to use a dehydrated detector: ${details}`); } 
} 

तो आप शायद एक आंतरिक कोणीय बग मिला।

मैं इस simple plunker के साथ अपने त्रुटि पुन: पेश नहीं कर सकते। क्या आपके पास एक प्लंकर है जो इस मुद्दे को दिखाता है?

भी https://github.com/angular/angular/issues/6786

+1

मैं प्लंकर में त्रुटि को पुन: पेश नहीं कर सका। मैं आयनिक 2 का उपयोग कर रहा हूं, इसलिए मुझे लगता है कि यह इसके साथ कुछ करने के लिए है। – Fisu

1

देखें इस के लिए GitHub पर एक खुला समस्या है: https://github.com/angular/angular/issues/6786#issuecomment-185429140

beta.2 में, कोई अपवाद उत्पन्न हुआ था। बीटा 3-6 (4,5, और 6 में कोई बदलाव नहीं होने लगते हैं), कोड को अपवाद फेंकने के लिए बदला गया था। आप सही हैं कि वर्तमान में यह कोई मुद्दा नहीं उठाता है।

जबकि मुझे यह त्रुटि नहीं मिलती है कि आपको यह त्रुटि क्यों मिलती है, इसके साथ मेरे खाते में से एक कोणीय जांच चक्र के दौरान एक घटक का निपटान करने से आया है, जहां यह दृश्य अपडेट करता है। अन्य ने गिथब धागे पर अपने मुद्दों को लॉग किया है।

0

मुझे पहले यह अपवाद मिला है और इसका बहुत मतलब है कि आप कुछ ऐसा उपयोग कर रहे हैं जो वर्चुअल मेमोरी में मौजूद नहीं है। मेरे मामले में, मैं वही कर रहा था जो आप कर रहे थे। ध्यान दें कि आप टाइमआउट के बाद किसी तत्व को एक्सेस करने का प्रयास कर रहे हैं, लेकिन क्या आप वाकई इस तत्व को समाप्त होने के बाद स्मृति में मौजूद हैं? मेरे पास उस तत्व पर * ng अगर है और स्थिति के बाद मैं पहुंच गया था और यह पहले ही हटा दिया गया था।

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