2016-06-20 6 views
0

Я создаю приложение Angular2. У меня есть асинхронная функция deleteObject в myService. Он возвращает обещание. У меня есть другая функция в Компонента, которая называется refresh, которая обновляет страницу. Как я могу вызвать обновление внутри Promise. Это то, что я пробовал:Angular2: вызов других функций внутри функций обратного вызова

export class AppComponent{ 

    refresh(){ 
     // refresh page here 
    } 

    delete(){ 
     this.myService.deleteObject(params).then(
      function(data){ 
      //this.refresh() doesn't work here. 
     }); 
    } 
}  

ответ

7

Если вы кодирование в машинописи, вы можете использовать вместо fat arrow functions. Они сохраняют контекст this, который вы ожидаете. Так заменить

delete(){ 
     this.myService.deleteObject(params).then(
      function(data){ 
      //this.refresh() doesn't work here. 
     }); 
} 

с этим:

delete(){ 
    this.myService.deleteObject(params).then(
      (data)=>{ 
       //this.refresh() should work here 
      } 
    ); 
} 
+0

Спасибо, Патрик. Я думаю, что это правильный ответ, когда дело доходит до Typcript. :) – UnderWood

1

это контекстная проблема. «this» относится к контексту функции обратного вызова, который может быть обещанием или чем-то еще. что вы на самом деле хотите, это ссылка на контекст компонента, вы можете добиться того, что как так

delete(){ 
    var componentRef = this; // colloquially "that" or "self" 
    this.myService.deleteObject(params).then(
     function(data){ 
     componentRef.refresh() // does work here. 
    }); 
} 
+0

также FWIW, вы можете посмотреть в [rxjs наблюдаемыми] (http://blog.angular-university.io/functional-reactive-programming-for- angular-2-developers-rxjs-and-observables /), которая является мощной угловой парадигмой (технически rxjs парадигма, но они включают ее) – kirinthos

+0

Спасибо @kirinthos. Я новичок в Javascript. Это сработало для меня. :) – UnderWood

+0

@UnderWood я могу предложить дать [закрытия] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Closures) a читать – kirinthos

Смежные вопросы