...por ejemplo...
<div class="month" *ngFor="#item of myCollection; #i = index">
...
</div>
Es posible hacer algo como ...
<div class="month" *ngFor="#item of 10; #i = index">
...
</div>
... sin apelar a una solución no elegante como:
<div class="month" *ngFor="#item of ['dummy','dummy','dummy','dummy','dummy',
'dummy','dummy','dummy']; #i = index">
...
</div>
?
Respuestas:
Dentro de su componente, puede definir una matriz de números (ES6) como se describe a continuación:
Vea este enlace para la creación de la matriz: es la mejor manera de crear una matriz de enteros de 1..20 en JavaScript .
Luego puede iterar sobre esta matriz con
ngFor
:O en breve:
fuente
Array(5).fill(4)
para crear[4,4,4,4,4]
Array.fill()
en Angular 2 Typecript produce el siguiente errorSupplied parameters do not match any signature of call t arget.
: al verificar los documentos Array.prototype.fill, dice que requiere 1 argumento ... developer.mozilla.org/en/docs/Web/JavaScript/Reference/…Array(5).fill(1).map((x, i) => i + 1); /*[1,2,3,4,5]*/
esto resuelve el error en TS@OP, estabas terriblemente cerca con tu solución "no elegante".
Qué tal si:
<div class="month" *ngFor="let item of [].constructor(10); let i = index"> ... </div>
Aquí obtengo el
Array
constructor de una matriz vacía:[].constructor
porqueArray
no es un símbolo reconocido en la sintaxis de la plantilla, y soy demasiado vago para hacerloArray=Array
ocounter = Array
en el mecanografiado del componente como lo hizo @ pardeep-jain en su cuarto ejemplo. Y lo llamo sinnew
porquenew
no es necesario para obtener una matriz delArray
constructor.Array(30)
ynew Array(30)
son equivalentesLa matriz estará vacía, pero eso no importa porque lo que realmente desea utilizar
i
a partir;let i = index
de su bucle.fuente
<li *ngFor="let number of [0,1,2,3,4]">{{number}}</li>
No, todavía no hay un método para que NgFor use números en lugar de colecciones. Por el momento, * ngFor solo acepta una colección como parámetro, pero puede hacerlo mediante los siguientes métodos:
Usando tubería
pipe.ts
Usar una matriz de números directamente en HTML (Ver)
Usando el método Split
Usar la creación de una nueva matriz en el componente
Demostración de trabajo
fuente
Array.fill()
método para generar la matriz en lugar de lores.push()
que se muestra en la respuesta de Thierrys.push
? Quiero decir que ambos métodos son correctos, pero aún así, si hay alguna diferencia. entre ellos.Array.fill()
más elegante que el loop usando push y también es probablemente más eficiente.counter = Array
, muy inteligente;)No podía soportar la idea de asignar una matriz para la repetición simple de componentes, así que he escrito una directiva estructural. En la forma más simple, eso no hace que el índice esté disponible para la plantilla, se ve así:
http://plnkr.co/edit/bzoNuL7w5Ub0H5MdYyFR?p=preview
fuente
Lo resolví así usando Angular 5.2.6 y TypeScript 2.6.2:
Se puede usar en un componente como este:
Comprobación de errores y afirmaciones omitidas a propósito por brevedad (por ejemplo, qué sucede si el paso es negativo).
fuente
<div *ngfor="let i of 4, i++"></div>
pueden sertambién puedes usar así
HTML
fuente
Puedes usar lodash:
No probé el código pero debería funcionar.
fuente
<div *ngfor="let i of 4, i++"></div>
pueden seri
o indexa un código, puede hacerlo*ngFor="let i of range; let i = index"
Esto también se puede lograr así:
HTML:
Mecanografiado:
Demo de trabajo
fuente
Dado que el método fill () (mencionado en la respuesta aceptada) sin argumentos arroja un error, sugeriría algo como esto (funciona para mí, Angular 7.0.4, Typecript 3.1.6)
En código de componente:
fuente
Esta es una manera agradable y rápida de repetir la cantidad de veces en myCollection.
Entonces, si myCollection fuera 5, Hello World se repetiría 5 veces.
fuente
Uso de directiva estructural personalizada con índice:
Según la documentación angular:
Cuando angular crea una plantilla llamando a createEmbeddedView, también puede pasar el contexto que se usará en su interior
ng-template
.Usando el parámetro opcional de contexto, puede usarlo en el componente, extrayéndolo dentro de la plantilla tal como lo haría con * ngFor.
app.component.html:
for.directive.ts:
fuente
Encuentre adjunto mi solución dinámica si desea aumentar el tamaño de una matriz dinámicamente después de hacer clic en un botón (así es como llegué a esta pregunta).
Asignación de variables necesarias:
Declare la función que agrega un elemento a la matriz:
Invocar la función en html
Iterar a través de la matriz con ngFor:
fuente
<div *ngfor="let i of 4, i++"></div>
pueden serLa forma más simple que he probado
También puede crear una matriz en su archivo componente y puede llamarla con la directiva * ngFor regresando como una matriz.
Algo como esto ....
Y esta función se puede usar en su archivo de plantilla html
fuente
<div *ngfor="let i of 4, i++"></div>
pueden serMi solución:
En html:
fuente