Controle o fluxo no Angular 17: eleve sua experiência de desenvolvimento
Você quer elevar sua experiência de desenvolvimento com Ignite UI for Angular? Experimente a nova sintaxe de modelo de bloco para um fluxo de controle otimizado e integrado.
Estou animado para compartilhar que você pode aprimorar sua experiência de desenvolvimento Angular em componentes Ignite UI for Angular adotando a nova sintaxe de modelo de bloco para um fluxo de controle integrado e otimizado. Esse recurso poderoso simplifica seu código, melhora a verificação de tipo, reduz o tamanho do pacote e aumenta o desempenho. Então, agora, vamos mergulhar em alguns exemplos de código para ver a sintaxe em ação!
O que é fluxo de controle integrado no Angular?
O termo "Fluxo de Controle" em Angular refere-se à ordem na qual instruções e diretivas são executadas em um aplicativo Angular. No Angular 17, há uma nova sintaxe integrada otimizada para gerenciar o fluxo de controle (@if, @switch, @for), oferecendo aos desenvolvedores um controle mais preciso sobre o fluxo de execução. Isso aproxima os desenvolvedores de padrões familiares na maioria das linguagens de programação, minimizando erros na construção de visualizações de aplicativos. Ele está diretamente disponível e pronto para uso em modelos sem importações adicionais.
No Angular 17, o Fluxo de Controle é gerenciado pelo sistema de detecção de alterações refinado, aplicando com eficiência as alterações de estado do aplicativo à exibição. Isso ressalta o papel da Angular como fornecedora de uma base sólida para a criação de aplicativos da Web modernos e interativos.
Começando com instruções condicionais
O que você precisa fazer é atualizar seu *ngIf e *ngSwitch com a nova sintaxe para um código mais intuitivo e limpo.
@if
Utilize o @if em um modelo IgxColumn do IgxGrid para renderização condicional:
<igx-column field="Discontinued" header="Discontinued" [sortable]="true" [dataType]="'boolean'"> <ng-template igxCell let-cell="cell" let-val> @if (val) { <img src="assets/active.png" title="Continued" alt="Continued" /> } @else { <img src="assets/expired.png" title="Discontinued" alt="Discontinued" /> } </ng-template> </igx-column>
@if de demonstração em IgxColumn
@switch
Aplique @switch diretiva dentro de um IgxSelectItem do componente IgxSelect para seleção dinâmica de ícones:
<igx-select-item [value]="fruit.type" class="select__entry" [text]="fruit.type"> {{fruit.type}} @switch (fruit.delivery) { @case ('flight') { <igx-icon>flight</igx-icon> } @case ('train') { <igx-icon>train</igx-icon> } @case ('boat') { <igx-icon>directions_boat</igx-icon> } } </igx-select-item>
@switch de demonstração no IgxSelect
Vamos falar sobre o loop for integrado Próximo
Experimente uma velocidade de renderização mais rápida com o novo loop for integrado.
@for
Muitos casos de uso podem ser descobertos com isso. O exemplo aqui usa o IgxDropDown:
@for (town of towns | startsWith:townSelected; track town.name) { <igx-drop-down-item [value]="town"> {{town}} </igx-drop-down-item> }
Ou fazendo um loop nas colunas da grade:
@for(c of columns; track c.field) { <igx-column [field]="c.field" [header]="c.field" [cellStyles]="c.cellStyles"> </igx-column> }
Demonstração para loop no IgxGrid
Exibições adiáveis para carregamento lento
Aproveite as novas exibições adiáveis para aprimorar o carregamento lento com uma abordagem declarativa e poderosa. Esse novo recurso pode dar a você a capacidade de criar um carregamento adiado dos itens da lista dos componentes IgxList. Eles aparecerão após um clique no botão:
<igx-list #fruitList> @defer (on interaction(b1)) { @for(fruit of fruitsData; track fruit) { <igx-list-item igxRipple igxRippleTarget=".igx-list__item-content"> {{ fruit }} </igx-list-item> } } @placeholder { <button #b1 type="button" igxButton="raised">Click here to trigger interaction</button> } </igx-list>
Demonstração de visualização diferida com IgxList
Amostra combinada
Se desejar, você pode explorar um exemplo mais abrangente que integra todos os recursos mencionados. Aqui, podemos adiar o conteúdo principal da gaveta de navegação. Ele será carregado logo após a seleção de um item da navegação:
@defer(on interaction(drawer)) { <span igxButton="icon" igxToggleAction="navigation"> <igx-icon family="material">menu</igx-icon> </span> <h5>{{selected}}</h5> @switch(selected) { @case('Grid') { <app-grid-adf-style-sample></app-grid-adf-style-sample> } @case('Autocomplete') { <app-autocomplete></app-autocomplete> } @default { <app-reactive-form-validation></app-reactive-form-validation> } } } @placeholder { <span>Pick a component from nav drawer to load...</span> }
Você pode verificar a guia de rede para ver o tempo de carregamento inicial e os recursos do aplicativo. Como estamos adiando o conteúdo principal da gaveta de navegação, é isso que é carregado:

E depois que o usuário seleciona um item, o conteúdo e os recursos para a exibição estão sendo carregados:

Dependendo do tamanho das exibições adiadas, você pode aumentar drasticamente o tempo de carregamento. Mais informações sobre exibições adiadas podem ser encontradas aqui. Além disso, a listagem dos itens de navegação pode ser obtida com a nova sintaxe:
@for(item of navItems; track item.name) { <span igxDrawerItem igxRipple (click)="navigate(item)"> <igx-icon family="material">{{ item.name }}</igx-icon> <span>{{ item.text }}</span> </span> }
Além disso, em uma das exibições do exemplo, há entradas de formulário reativas que utilizam esse recurso para mostrar as validações, ícones e dicas:
<igx-input-group> <label igxLabel for="password">Password</label> <input igxInput name="password" [type]="showPassword ? 'text' : 'password'" formControlName="password" /> @if (password.errors?.minlength) { <igx-hint >Password should be at least 8 characters</igx-hint> } @if (password.value) { <igx-icon igxSuffix (click)="showPassword = !showPassword"> {{ togglePasswordVisibility }} </igx-icon> } </igx-input-group>
Começando
Atualize seu projeto Angular para a versão 17 e experimente o fluxo de controle interno hoje mesmo. Para usá-lo em seus projetos existentes. Explore a experiência aprimorada do desenvolvedor e aumente o desempenho do seu aplicativo Angular.
Boa codificação com o fluxo de controle de Angular aprimorado!
