2016-11-09 24 views
5

Tôi có một số vấn đề khi cố gắng lấy uid ra khỏi hàm tạo của mình. Khi tôi chạy mã này, uid hiển thị hoàn hảo trong Nhật ký kiểm tra 1. Tuy nhiên bản ghi Test2 cho thấy không xác định của nó. Liệu uid xóa chính mình khi constructor đóng?UID không hiển thị của hàm tạo

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); 
    } 
} 

đây là đầu ra của tôi trong giao diện điều khiển của tôi

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 

câu hỏi thứ hai của tôi là làm thế nào tôi có thể nhận được uid ra khỏi nhà xây dựng không? Nguyên nhân tôi cần nó để có được một số dữ liệu othre từ cơ sở dữ liệu.

Trả lời

2

Khi console.log("Test2...") được thực hiện giá trị là chưa có sẵn

Khi dữ liệu đến từ máy chủ các hàm được chuyển vào subscribe()

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

được gọi, chỉ sau đó dữ liệu có sẵn và chỉ trong vòng đó chức năng, console.log("Test2 ...") đã được thực hiện một thời gian dài trước đó

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

Cảm ơn câu trả lời đó, nó rõ ràng rất nhiều. Nhưng có giải pháp làm thế nào tôi có thể nhận được dữ liệu bên ngoài constructor của tôi? –

+0

Bạn có thể lấy nó bên ngoài nhà xây dựng tốt. Chỉ cần gán nó cho một thuộc tính ('this.userid = auth.uid;' thực hiện điều này). Câu hỏi nên giống như "** khi ** tôi có thể truy cập nó bên ngoài hàm tạo". –

+0

Nó phụ thuộc vào những gì bạn chính xác cố gắng thực hiện. Nếu bạn muốn sử dụng nó trong template binding '[xxx] =" auth? .id "' thì chỉ cần sử dụng '?' Bổ sung để ngăn chặn lỗi khi giá trị chưa có sẵn. Nếu bạn muốn sử dụng nó trong mã, sau đó gọi mã từ bên trong callback bạn chuyển tới 'subscribe (...)'. –

Các vấn đề liên quan