2016-10-28 101 views
1

如何訪問這個超出escope的變量?爲什麼我不能訪問變量「total_clients」?

出口類ClientsComponent實現的OnInit { 標題:字符串=「所有客戶機」

clients: Client[] = []; 
response: any; 
total_clients: number; 
total_pages: number; 
pages: any[] = []; 

constructor(private _clientService: ClientService) {} 

ngOnInit() { 

    this._clientService.getData() 
     .subscribe(
     data => this.response = data, 
     err => console.error(err), 
     () => { 
      this.clients = this.response.data, 
      this.total_clients = this.response.total 
      } 
     ); 


    console.log(this.total_clients); <- i can not access this 


} 
+0

控制檯日誌發生在數據返回之前,您可以在您的訂閱中使用回調函數來觸發邏輯,而不是。 – dylpickle

+0

可能的重複[如何返回來自異步調用的響應?](http://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an-asynchronous-call) – JJJ

+0

好的。但是,我需要處理這個變量到foreach中,但是我不能這樣做()=> {}。如何確保加載後使用此變量? – user3050037

回答

1

這是不超出範圍,它只是沒有當this.total_clients印刷控制檯填充。所有的HTTP請求都是異步操作,因此,如果您要訪問它,你可以做到這一點在認購,這樣的:

ngOnInit() { 

    this._clientService.getData() 
     .subscribe(
     data => this.response = data, 
     err => console.error(err), 
     () => { 
      this.clients = this.response.data, 
      this.total_clients = this.response.total 
      console.log(this.total_clients); <- this will print your data 
      } 
     ); 


    console.log(this.total_clients); <- this is executed before the call is finished, as you will see 


} 
+0

好的。但是,我需要處理這個變量到foreach中,但是我不能這樣做()=> {}。如何確保加載後使用此變量? – user3050037

0

需要初始化在構造函數中的變量,然後在從回調來填充它異步調用。以下是完整的代碼:

export class ClientsComponent implements OnInit { title: string = "All Clients" 
    clients: Client[] = []; 
    response: any; 
    total_clients: number; 
    total_pages: number; 
    pages: any[] = []; 

    constructor(private _clientService: ClientService) { 
    this.clients = []; 
    this.total_clients = 0l 
    } 

    ngOnInit() { 
    this._clientService.getData() 
     .subscribe(
     data => { 
      this.clients = this.response.data; 
      this.total_clients = this.response.total; 
     } 
     err => console.error(err) 
    ); 
    } 
} 
相關問題