web-dev-qa-db-fra.com

Méthode d'appel d'une classe angulaire 2 à l'intérieur d'un modèle

J'ai une application angulaire 2 qui a une classe appelée utilisateur. Cet utilisateur a un attribut appelé delete_at qui est null ou contient une date/heure. De toute évidence, l'utilisateur est supprimé si la propriété delete_at n'est pas null. Voici à quoi ressemble mon fichier user.ts:

User.ts

export class User {
    id: number;
    email: string;
    created_at: string;
    first_name: string;
    last_name: string;
    deleted_at: any;

    name() {
        if (this.deleted_at === null) {
            return this.first_name;
        } else {
            return 'DELETED';
        }
    }
}

Maintenant, je m'attendais à pouvoir appeler name dans mon modèle avec une simple ligne:

{{ user.name }}

Cela ne renvoie toutefois rien. Comment pouvez-vous appeler certaines fonctions du modèle angulaire 2? Ou est-ce pas permis?

Edit: pour clarifier un peu, c’est une classe Utilisateur que j’utilise dans mon composant user-list.component.ts , plusieurs utilisateurs sont gérés dans ce composant.

19
hY8vVpf3tyR57Xib

Soit vous appelez la méthode comme ceci:

{{user.name()}} // instead of {{user.name}}

Pour cette approche, vous devez être conscient du fait que vous allez perdre le contexte d'exécution (this). Voir cette question pour plus de détails:

Ou vous définissez votre méthode comme un getter pour pouvoir utiliser user.name dans votre modèle:

get name() {
  if (this.deleted_at === null) {
    return this.first_name;
  } else {
    return 'DELETED';
  }
}
15
Thierry Templier

Si le modèle auquel vous faites référence provient de votre composant ci-dessus, vous pouvez simplement faire {{ name() }}. Dans Angular 2, vous n’avez pas à vous référer d’abord à votre composant pour appeler des méthodes comme c’était le cas dans Angular 1. Si votre classe est simplement un modèle que vous avez déclaré dans votre composant, vous devez d'abord obtenir la référence à ce modèle, puis appelez votre méthode {{ user.name() }}. Cependant, si votre méthode est juste un simple getter, je voudrais simplement accéder à une propriété publique au lieu d'appeler une méthode ici.

0
LordTribual