...por exemplo...
<div class="month" *ngFor="#item of myCollection; #i = index">
...
</div>
É possível fazer algo como ...
<div class="month" *ngFor="#item of 10; #i = index">
...
</div>
... sem apelar para uma solução não elegante como:
<div class="month" *ngFor="#item of ['dummy','dummy','dummy','dummy','dummy',
'dummy','dummy','dummy']; #i = index">
...
</div>
?
Respostas:
Dentro do seu componente, você pode definir uma matriz de número (ES6), conforme descrito abaixo:
Consulte este link para a criação da matriz: Maneira resumida de criar uma matriz de números inteiros de 1 a 20 em JavaScript .
Você pode iterar sobre essa matriz com
ngFor
:Ou brevemente:
fonte
Array(5).fill(4)
para criar[4,4,4,4,4]
Array.fill()
do Angular 2 Typescript produz o seguinte erroSupplied parameters do not match any signature of call t arget.
- Verificando os documentos Array.prototype.fill, ele exige 1 argumento ... developer.mozilla.org/en/docs/Web/JavaScript/Reference/…Array(5).fill(1).map((x, i) => i + 1); /*[1,2,3,4,5]*/
isso resolve o erro no TS@OP, você estava muito perto da sua solução "não elegante".
E se:
<div class="month" *ngFor="let item of [].constructor(10); let i = index"> ... </div>
Aqui estou obtendo o
Array
construtor a partir de uma matriz vazia:,[].constructor
porqueArray
não é um símbolo reconhecido na sintaxe do modelo, e estou com preguiça de fazerArray=Array
oucounter = Array
no componente texto datilografado como @ pardeep-jain fez no seu quarto exemplo. E eu estou chamando isso de foranew
porquenew
não é necessário para obter uma matriz doArray
construtor.Array(30)
enew Array(30)
são equivalentes.A matriz estará vazia, mas isso não importa, porque você realmente quer apenas para usar
i
a partir;let i = index
de seu loop.fonte
<li *ngFor="let number of [0,1,2,3,4]">{{number}}</li>
Ainda não existe um método para o NgFor usar números em vez de coleções. No momento, * ngFor aceita apenas uma coleção como parâmetro, mas você pode fazer isso seguindo os seguintes métodos:
Usando tubo
pipe.ts
Usando matriz numérica diretamente em HTML (Exibir)
Usando o método Split
Usando a criação de Nova matriz no componente
Demonstração de trabalho
fonte
Array.fill()
método para gerar a matriz em vez deres.push()
como mostrado na resposta de Thierrys.push
? Quero dizer que ambos os métodos estão corretos, mas ainda assim, se houver alguma diferença. entre eles.Array.fill()
mais elegante que o loop usando push e também é provavelmente mais eficiente.counter = Array
, muito inteligente;)Não suportava a idéia de alocar uma matriz para repetição simples de componentes, por isso escrevi uma diretiva estrutural. Na forma mais simples, que não disponibiliza o índice para o modelo, é assim:
http://plnkr.co/edit/bzoNuL7w5Ub0H5MdYyFR?p=preview
fonte
Resolvi assim usando o Angular 5.2.6 e o TypeScript 2.6.2:
Pode ser usado em um componente como este:
Verificação de erros e afirmações omitidas de propósito por questões de brevidade (por exemplo, o que acontece se a etapa for negativa).
fonte
<div *ngfor="let i of 4, i++"></div>
pode ser?você também pode usar assim
HTML
fonte
Você pode usar o lodash:
Não testei o código, mas deve funcionar.
fonte
<div *ngfor="let i of 4, i++"></div>
podem seri
ou indexar um código, poderá fazê-lo #*ngFor="let i of range; let i = index"
Isso também pode ser alcançado assim:
HTML:
Texto datilografado:
Demonstração de trabalho
fonte
Como o método fill () (mencionado na resposta aceita) sem argumentos gera um erro, eu sugeriria algo assim (funciona para mim, Angular 7.0.4, Typescript 3.1.6)
No código do componente:
fonte
Esta é uma maneira rápida e agradável de repetir a quantidade de vezes em myCollection.
Portanto, se myCollection fosse 5, o Hello World seria repetido 5 vezes.
fonte
Usando diretiva estrutural personalizada com índice:
De acordo com a documentação angular:
Quando angular cria um modelo chamando createEmbeddedView, ele também pode passar o contexto que será usado dentro
ng-template
.Usando o parâmetro opcional de contexto, você pode usá-lo no componente, extraindo-o no modelo da mesma forma que faria com o * ngFor.
app.component.html:
for.directive.ts:
fonte
Por favor, encontre em anexo minha solução dinâmica se você quiser aumentar dinamicamente o tamanho de uma matriz depois de clicar em um botão (foi assim que cheguei a essa pergunta).
Alocação de variáveis necessárias:
Declare a função que adiciona um elemento à matriz:
Chame a função em html
Iterar através da matriz com ngFor:
fonte
<div *ngfor="let i of 4, i++"></div>
pode ser?Uma maneira mais simples que eu tentei
Você também pode criar uma matriz no seu arquivo de componente e chamá-la com a diretiva * ngFor retornando como uma matriz.
Algo assim ....
E essa função pode ser usada no seu arquivo de modelo html
fonte
<div *ngfor="let i of 4, i++"></div>
pode ser?Minha solução:
Em html:
fonte