Angular2-TypeScript: incrémenter un nombre après le délai D'attente dans AppComponent

Je veux créer une Application simple Angular2 en utilisant TypeScript. Semble assez simple, mais je ne suis pas en mesure de réaliser ce que je voulais.

Je veux afficher une valeur de propriété dans le modèle. Et je veux mettre à jour la même chose après 1 seconde en utilisant setTimeout.

Le Code Plunkr est ici: Code sur Plunkr

Ce que j'ai écrit est ici :

import {Component} from 'angular2/core';

interface Hero {
  id: number;
  name: string;
}

@Component({
  selector: 'my-app',
  template:`<h1>Number Increment</h1><p>{{n}}</p>`
})
export class AppComponent {
  public n : number = 1;
  setTimeout(function() {
    n = n + 10;
  }, 1000);
}    

Lorsque j'utilise ce code, je reçois l'erreur suivante:

Uncaught SyntaxError: Unexpected token ;

Pourquoi je ne suis pas en mesure d'accéder n, qui est dans le même portée que nous avions l'habitude de faire en JavaScript. Si Je ne me trompe pas, nous pouvons aussi utiliser du JavaScript pur en TypeScript.

J'ai même essayé

export class AppComponent {
  public n : number = 1;
  console.log(n);
}

Mais je ne peux pas voir la valeur de n dans la console.

Quand j'ai essayé

export class AppComponent {
  public n : number = 1;
  console.log(this);
}

Je reçois la même erreur que ci-dessus. Pourquoi ne pouvons-nous pas accéder à cela dans cet endroit. Je suppose que this fait référence au contexte actuel comme dans JavaScript.

Merci d'avance.

27
demandé sur Mahisha 2015-12-30 15:26:40

2 réponses

Ce n'est pas un code typescript valide. Vous ne pouvez pas avoir d'invocations de méthode dans le corps d'une classe.

export class AppComponent {
  public n: number = 1;
  setTimeout(function() {
    n = n + 10;
  }, 1000);
}

Déplacez plutôt l'appel setTimeout dans le constructeur de la classe.

export class AppComponent {
  public n: number = 1;

  constructor() {
    setTimeout(() => {
      this.n = this.n + 10;
    }, 1000);
  }

}

Aussi dans TypeScript, vous pouvez vous référer aux propriétés de classe ou aux méthodes uniquement via this .

71
répondu toskv 2015-12-30 15:56:32

Vous devez placer votre traitement dans le constructeur de classe ou une méthode OnInit hook.

6
répondu Thierry Templier 2018-02-26 12:03:11