2016-11-09 15 views
5

से बाहर नहीं दिखाता है मुझे अपने कन्स्ट्रक्टर से बाहर निकलने की कोशिश करने में कुछ समस्याएं हैं। जब मैं इस कोड को चलाता हूं तो यूआईडी टेस्ट 1 लॉग में पूरी तरह से दिखाता है। हालांकि टेस्ट 2 लॉग इसकी अपरिभाषित दिखाता है। जब निर्माता बंद हो जाता है तो क्या यूआईडी खुद को हटा देता है?यूआईडी कन्स्ट्रक्टर

import { Component, OnInit } from '@angular/core'; 
import {AngularFire, FirebaseObjectObservable, FirebaseListObservable} from 'angularfire2'; 

@Component({ 
    selector: 'dashboard', 
    templateUrl: 'dashboard.component.html', 
    styleUrls: ['./dashboard.component.css'] 
}) 
export class DashboardComponent { 
    userid:string; 
    users:FirebaseListObservable<any[]>; 
    constructor(public af: AngularFire) { 
    this.af.auth.subscribe(auth => { 
     console.log(auth.uid); 
     this.userid = auth.uid; 
     console.log("Test 1 "+ this.userid); 
    }); 
    console.log("Test2 "+ this.userid); 
    } 
} 

यह मेरा कंसोल में मेरी उत्पादन

Angular 2 is running in the development mode. Call enableProdMode() to enable the production mode. 
dashboard.component.ts:18 Test2 undefined 
dashboard.component.ts:14 CgTltJ1h2TUFS5teoACCxoPHP1g1 
dashboard.component.ts:16 Test 1 CgTltJ1h2TUFS5teoACCxoPHP1g1 

मेरे दूसरे प्रश्न कैसे मैं अपने निर्माता से बाहर यूआईडी प्राप्त कर सकते हैं क्या है? क्योंकि मुझे डेटाबेस से कुछ अन्य डेटा प्राप्त करने की आवश्यकता है।

उत्तर

2

जब console.log("Test2...") मूल्य निष्पादित किया जाता है अभी तक उपलब्ध

डेटा सर्वर समारोह subscribe()

auth => { 
     console.log(auth.uid); 
     this.userid = auth.uid; 
     console.log("Test 1 "+ this.userid); 
    } 

के लिए पारित से आता है कहा जाता है, और केवल कि भीतर उसके बाद ही डेटा उपलब्ध हो जाता है नहीं है फ़ंक्शन, console.log("Test2 ...") को उस

export class DashboardComponent { 
    userid:string; 
    users:FirebaseListObservable<any[]>; 
    constructor(public af: AngularFire) { 
    this.af.auth.subscribe(auth => { 
     console.log(auth.uid); 
     this.userid = auth.uid; 
     console.log("Test 1 "+ this.userid); 
    }); 
    console.log("Test2 "+ this.userid); 
    } 
} 
+0

उस उत्तर के लिए धन्यवाद, यह बहुत साफ करता है। लेकिन क्या कोई समाधान है कि मैं अपने कन्स्ट्रक्टर के बाहर डेटा कैसे प्राप्त कर सकता हूं? –

+0

आप इसे कन्स्ट्रक्टर के बाहर ठीक कर सकते हैं। बस इसे किसी संपत्ति को असाइन करें ('this.userid = auth.uid; 'यह करता है)। प्रश्न अधिक होना चाहिए, "** जब मैं इसे कन्स्ट्रक्टर के बाहर एक्सेस कर सकता हूं"। –

+0

यह इस बात पर निर्भर करता है कि आप वास्तव में क्या करने की कोशिश करते हैं। यदि आप इसे टेम्पलेट बाइंडिंग '[xxx] = "auth? .id" में उपयोग करना चाहते हैं, तो फिर मान अभी तक उपलब्ध नहीं होने पर त्रुटियों को रोकने के लिए अतिरिक्त'? 'का उपयोग करें। यदि आप इसे कोड में उपयोग करना चाहते हैं, तो उस कोड को कॉलबैक के भीतर से कॉल करें जिसे आप सब्सक्राइब करते हैं (...) '। –

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