Próbuję użyć SetInterval Wewnątrz: Klasa SignaCompComponent SO, Funkcja () {} może zmienić wartości do 2 VaR klasyfikacji klasy, które są przebudowy funkcji () {}, ale inscope of the Class SignupComponent i zawodzę. Używam SetInterval, więc mogę aktywować trochę animacji w cyklach. Oto kod:

export class SignupComponent  {
      state = 'normal';
      state2 = 'normal';
      v1 = 0;
      myFunc = function (p1){setInterval(function(){
           p1++;
           if (p1%4==0)
        {
            console.log(this.state2);
            this.state == 'normal' ? this.state = 'disappear': this.state
               = 'normal';
            this.state2 == 'normal' ? this.state2 = 'appear': this.state2
               = 'normal' 
        }
    }, 1000)};

Problem polega na tym, że to jest to. Dlatego.state2 wewnątrz SetInterval (funkcja () {....} Nie odnoszą się do stanu, state2 poza zakresem, ale w zakresie klasy. Dlaczego nie mogę tego zrobić zamknięcia? Czy istnieje sposób na połączenie tych kilku Vars, więc wartości zostaną zaktualizowane?

3
Daniel Gontar 17 luty 2017, 16:44

2 odpowiedzi

Najlepsza odpowiedź

Wystarczy użyć funkcji strzałek () => {} zamiast function() {}, aby zrobić this wskaźnik do bieżącej instancji klasy

myFunc = function (p1){setInterval(() => {
3
Günter Zöchbauer 18 luty 2017, 12:20

Settimeout / SetInterval należy nazwać w ten sposób (dla użytkownika kątowego):

export class demo implements OnDestroy{
   private _setTimeoutHandler: any;
   private _setIntervalHandler: any;

   mymethod1(){
       this._setTimeoutHandler = setTimeout(() => {
       // my to do 
       }, 100);
   }

   mymethod2(){
      this._setIntervalHandler = setInterval(() => { 
          myTimer() 
     }, 100);
   }


   ngOnDestroy() {
      clearTimeout(this._setTimeoutHandler)}
      clearInterval(this.__setIntervalHandler);
   }
}
3
Long Field 6 marzec 2017, 05:37