результат http в contructor недоступен в ngoninit

Используя angular2 с jquery, я получаю список из API (есть результат), но он не привязывается к jquery:

list: Array<any> = [];
constructor(public http: Http){
   // I can get result from api
   this.list = http.get(...) ...

   // If I just pass value to list, it works
   //this.list = [{"test":"hello"}];
}
ngOnInit() {
    // using Jquery function, but the this.list is empty?
    (<JQueryCustom>$("#textarea")).makeInput({
        source: this.list, 
        showAtCaret: true
    });
}

2 ответа

  1. Это ожидаемо.

    Необходимо переместить код в

    http.get(...).subscribe(response => {
      // code that uses `response` goes here
    });
    

    ngOnInit() выполняется непосредственно после вызова конструктора.
    Вызов сервера занимает много времени, связанного с тем, как быстро выполняется в браузере. Вызов сервера является асинхронным и сначала только планируется в очередь событий для последующего выполнения. ngOnInitсинхронизируется и обрабатывается в рамках одного и того же «события».

    При поступлении ответа от сервера subscribe(...)вызывается обратный вызов, на который передается ответ.

  2. Попробовать это:

    constructor(public http: Http){
    
       http.get(url).subscribe(response => this.list = response)
    }
    

    Теперь список получит данные из api, list = http… не будет работать.
    Также я использую response, но вы можете использовать любое другое имя переменной.

    Конструктор загружается первым, но не использует его для тяжелого подъема, как http-запросы делают это в крюке ngInit.

    https://angular.io/docs/ts/latest/guide/lifecycle-hooks.html