...par exemple...
<div class="month" *ngFor="#item of myCollection; #i = index">
...
</div>
Est-il possible de faire quelque chose comme ...
<div class="month" *ngFor="#item of 10; #i = index">
...
</div>
... sans appel à une solution non élégante comme:
<div class="month" *ngFor="#item of ['dummy','dummy','dummy','dummy','dummy',
'dummy','dummy','dummy']; #i = index">
...
</div>
?
Réponses:
Dans votre composant, vous pouvez définir un tableau de nombres (ES6) comme décrit ci-dessous:
Voir ce lien pour la création du tableau: Méthode d'essai pour créer un tableau d'entiers de 1..20 en JavaScript .
Vous pouvez ensuite parcourir ce tableau avec
ngFor
:Ou brièvement:
la source
Array(5).fill(4)
créer[4,4,4,4,4]
Array.fill()
dans Angular 2 Typescript produit l'erreur suivanteSupplied parameters do not match any signature of call t arget.
- En vérifiant la documentation Array.prototype.fill, elle indique qu'il faut 1 argument ... developer.mozilla.org/en/docs/Web/JavaScript/Reference/…Array(5).fill(1).map((x, i) => i + 1); /*[1,2,3,4,5]*/
cela résout l'erreur dans TS@OP, vous étiez terriblement proche de votre solution "non élégante".
Que diriez-vous:
<div class="month" *ngFor="let item of [].constructor(10); let i = index"> ... </div>
Ici, j'obtiens le
Array
constructeur à partir d'un tableau vide:,[].constructor
car ceArray
n'est pas un symbole reconnu dans la syntaxe du modèle, et je suis trop paresseux pour le faireArray=Array
oucounter = Array
dans le script de composant comme @ pardeep-jain l'a fait dans son 4ème exemple. Et je l'appelle sansnew
parce que cenew
n'est pas nécessaire pour sortir un tableauArray
constructeur.Array(30)
etnew Array(30)
sont équivalents.Le tableau sera vide, mais cela n'a pas d'importance car vous voulez vraiment utiliser
i
from;let i = index
dans votre boucle.la source
<li *ngFor="let number of [0,1,2,3,4]">{{number}}</li>
Non, il n'y a pas encore de méthode pour NgFor utilisant des nombres à la place des collections, Pour le moment, * ngFor n'accepte qu'une collection en tant que paramètre, mais vous pouvez le faire en utilisant les méthodes suivantes:
Utilisation du tuyau
pipe.ts
Utilisation d'un tableau de nombres directement dans HTML (View)
Utilisation de la méthode Split
Utilisation de la création d'un nouveau tableau dans le composant
Démo de travail
la source
Array.fill()
méthode de génération du tableau au lieu deres.push()
celle indiquée dans la réponse de Thierrys.push
? Je veux dire que les deux méthodes sont correctes mais toujours si elles diffèrent. entre eux.Array.fill()
plus élégant que la boucle en utilisant push et c'est aussi probablement plus efficace.counter = Array
, très intelligente;)Je ne pouvais pas supporter l'idée d'allouer un tableau pour la simple répétition des composants, j'ai donc écrit une directive structurelle. Dans sa forme la plus simple, cela ne rend pas l'index disponible pour le modèle, cela ressemble à ceci:
http://plnkr.co/edit/bzoNuL7w5Ub0H5MdYyFR?p=preview
la source
Je l'ai résolu comme ceci en utilisant Angular 5.2.6 et TypeScript 2.6.2:
Il peut être utilisé dans un composant comme celui-ci:
Vérification des erreurs et affirmations omises volontairement par souci de concision (par exemple, que se passe-t-il si l'étape est négative).
la source
<div *ngfor="let i of 4, i++"></div>
maivous pouvez aussi utiliser comme ça
HTML
la source
Vous pouvez utiliser lodash:
Je n'ai pas testé le code mais cela devrait fonctionner.
la source
<div *ngfor="let i of 4, i++"></div>
maii
ou indexez un code, vous pouvez le faire*ngFor="let i of range; let i = index"
Ceci peut également être réalisé comme ceci:
HTML:
Manuscrit:
Démo de travail
la source
Puisque la méthode fill () (mentionnée dans la réponse acceptée) sans arguments jette une erreur, je suggérerais quelque chose comme ça (fonctionne pour moi, Angular 7.0.4, Typescript 3.1.6)
Dans le code composant:
la source
C'est un moyen agréable et rapide de répéter le nombre de fois dans myCollection.
Donc, si myCollection était de 5, Hello World serait répété 5 fois.
la source
Utilisation de la directive structurelle personnalisée avec index:
Selon la documentation angulaire:
Lorsque angular crée un modèle en appelant createEmbeddedView, il peut également transmettre le contexte qui sera utilisé à l'intérieur
ng-template
.En utilisant le paramètre facultatif context, vous pouvez l'utiliser dans le composant, en l'extrayant dans le modèle comme vous le feriez avec le * ngFor.
app.component.html:
for.directive.ts:
la source
Veuillez trouver ci-joint ma solution dynamique si vous souhaitez augmenter la taille d'un tableau de manière dynamique après avoir cliqué sur un bouton (c'est ainsi que je suis arrivé à cette question).
Attribution des variables nécessaires:
Déclarez la fonction qui ajoute un élément au tableau:
Appelez la fonction en html
Itérer à travers un tableau avec ngFor:
la source
<div *ngfor="let i of 4, i++"></div>
maiUn moyen le plus simple que j'ai essayé
Vous pouvez également créer un tableau dans votre fichier de composant et vous pouvez l'appeler avec la directive * ngFor en le renvoyant sous forme de tableau.
Quelque chose comme ça ....
Et cette fonction peut être utilisée dans votre fichier de modèle html
la source
<div *ngfor="let i of 4, i++"></div>
maiMa solution:
En html:
la source