Dans mon modèle angulaire, j'ai besoin du nombre de clés d'un objet. J'écrivais {{ Object.keys(myObj).length }} dans le fichier modèle. Mais il renvoie une erreur : ERROR TypeError: Cannot read property 'keys' of undefined.

Ensuite, sur Internet, j'ai reçu une suggestion, j'ai donc écrit Object = Object dans mon composant et cela a fonctionné.

  1. Je ne comprends pas quelle est la philosophie derrière cela.
  2. Comment fonctionnent les autres expressions et déclarations entre accolades dans un modèle angulaire ?
8
shyammakwana.me 16 mars 2019 à 09:43

2 réponses

Meilleure réponse

Le contexte d'expression de modèle est généralement limité à l'instance de composant elle-même. Ainsi, lorsque vous interpolez une variable à l'intérieur de {{}}, elle recherchera essentiellement une propriété correspondante de l'instance de composant sous-jacente ou une variable de référence de modèle.

Lorsque vous faites Object = Object dans un composant, vous créez en fait une propriété Object du composant qui fait référence au Object global auquel le composant a une référence.

Mais la même chose n'est pas possible dans une expression de modèle, elle n'a pas accès aux propriétés globales à l'exception de undefined.

Cette partie de la docs explique ceci :

Les expressions de modèle ne peuvent pas faire référence à quoi que ce soit dans l'espace de noms global, à l'exception d'undefined. Ils ne peuvent pas faire référence à une fenêtre ou à un document. De plus, ils ne peuvent pas appeler console.log() ou Math.max() et ils sont limités au référencement des membres du contexte d'expression.

9
Fullstack Guy 16 mars 2019 à 07:04

Tout ce que vous rendez dans les modèles doit faire partie du composant, cela aide vraiment à l'encapsulation, aide à prévenir les erreurs futures, les comportements inattendus et facilite les tâches de débogage D'un autre côté, un peu plus en dehors du sujet, évitez d'utiliser des méthodes à l'intérieur { {}} puisqu'ils agissent comme des tuyaux impurs et s'exécutent plusieurs fois à chaque interaction de l'utilisateur avec le DOM, il est préférable d'enregistrer le résultat de la fonction ou de la méthode dans une propriété du composant.ts et cette propriété est celle que tu montres

0
José 16 mars 2019 à 08:32