Angular 2 – использование this внутри setTimeout

У меня есть такая функция в моем классе

  showMessageSuccess(){

    var that = this;
    this.messageSuccess = true;

    setTimeout(function(){
      that.messageSuccess = false;
    },3000);

  }

Как я могу переписать это, чтобы мне не нужно было хранить ссылку на «это» в «этом» var? Если я использую this внутри setTimeout, логическое значение messageSuccess не меняется/не обновляется.


person user2085143    schedule 12.12.2016    source источник
comment
Я считаю, что это не дубликат, предложение this в angular отличается от обычного javascript. (преобразуется в _this в финальном коде)   -  person aliqandil    schedule 29.08.2018


Ответы (1)


Вам необходимо использовать функцию Стрелочная функция ()=> ES6, чтобы сохранить this контекст в setTimeout.

// var that = this;                        // no need of this line
this.messageSuccess = true;

setTimeout(()=>{                           // <<<---using ()=> syntax
    this.messageSuccess = false;
}, 3000);
person micronyks    schedule 12.12.2016
comment
Это всегда работает. Может быть какая-то другая проблема. я бы хотел, чтобы вы расследовали это, или вы можете задать соответствующий вопрос @RomainBruckert - person micronyks; 22.08.2017
comment
это отличный ответ!! Спасибо, решил большую проблему. Кстати, не могли бы вы подсказать, где еще нам нужно использовать ()=› в angular 7? - person sid; 06.07.2019
comment
@sid: это стандарт ES6/ES7. Если вы используете машинопись, она используется везде. - person micronyks; 26.07.2019
comment
Итак, каждый раз, когда я использую angular7/typescript, я должен использовать () => верно? - person sid; 26.07.2019
comment
Не работает в angular/typescript.... все равно нужно хранить внешнюю область в переменной... - person Manuel Azar; 07.02.2020
comment
Привет всем, на самом деле вы не можете вызвать setTimeout из какой-либо функции, поэтому, если вы хотите позвонить, вы можете поместить его в хук ngInit() - person Higor Tavares; 05.04.2021