Visão geral da diretiva de máscara Angular
Ao aplicar a diretiva igxMask
em um campo de entrada de texto, o desenvolvedor pode controlar a entrada do usuário e formatar o valor visível, com base em regras de máscara configuráveis. Ela fornece diferentes opções de entrada e facilidade de uso e configuração.
Angular Mask Example
Getting Started with Ignite UI for Angular Mask
Para começar a usar a diretiva Ignite UI for Angular Mask, primeiro você precisa instalar Ignite UI for Angular. Em um aplicativo Angular existente, digite o seguinte comando:
ng add igniteui-angular
Para obter uma introdução completa ao Ignite UI for Angular, leia o tópico de introdução.
O próximo passo é importar o IgxMaskModule
e IgxInputGroupModule
no seu arquivo app.module.ts.
Note
A diretiva igxMask
é usada em uma entrada do tipo text.
// app.module.ts
...
import { IgxMaskModule, IgxInputGroupModule } from 'igniteui-angular';
// import { IgxMaskModule, IgxInputGroupModule } from '@infragistics/igniteui-angular'; for licensed package
@NgModule({
...
imports: [..., IgxMaskModule, IgxInputGroupModule],
...
})
export class AppModule {}
Como alternativa, a partir da 16.0.0
você pode importar o IgxMaskDirective
como uma dependência autônoma.
// home.component.ts
import { IgxMaskDirective, IGX_INPUT_GROUP_DIRECTIVES } from 'igniteui-angular';
// import { IgxMaskDirective, IGX_INPUT_GROUP_DIRECTIVES } from '@infragistics/igniteui-angular'; for licensed package
@Component({
selector: 'app-home',
template: `
<igx-input-group>
<igx-prefix>
<igx-icon>phone</igx-icon>
</igx-prefix>
<label igxLabel>Phone</label>
<input igxInput type="text" [igxMask]="'(####) 00-00-00 Ext. 9999'"/>
</igx-input-group>
`,
styleUrls: ['home.component.scss'],
standalone: true,
imports: [IgxMaskDirective, IGX_INPUT_GROUP_DIRECTIVES]
})
export class HomeComponent {}
Agora que você importou o módulo ou a diretiva Ignite UI for Angular Mask, você pode começar a usar a diretiva igxMask
.
Using the Angular Mask
Supported Built-in Mask Rules
Personagem de máscara | Descrição |
---|---|
0 | requer um dígito (0-9) |
9 | requer um dígito (0-9) ou um espaço |
# | requer um dígito (0-9), sinal de mais (+) ou menos (-) |
eu | requer uma letra (aZ) |
? | requer uma letra (aZ) ou um espaço |
UM | requer um alfanumérico (0-9, aZ) |
um | requer um alfanumérico (0-9, aZ) ou um espaço |
& | qualquer caractere do teclado (excluindo espaço) |
C | qualquer caractere do teclado |
Apply Mask on Input
No exemplo a seguir, aplicamos um número de telefone com uma máscara de ramal a uma entrada.
<!--sample.component.html-->
<igx-input-group>
<igx-prefix>
<igx-icon>phone</igx-icon>
</igx-prefix>
<label igxLabel>Phone</label>
<input igxInput type="text" [igxMask]="'(####) 00-00-00 Ext. 9999'"/>
</igx-input-group>
Se configurado corretamente, você deverá ver o exemplo de demonstração no seu navegador.
Note
A IgxMaskDirective
suporta entrada IME e atualiza a máscara quando a composição termina.
Bind to Formatted/Raw Value
Use a entrada includeLiterals
para configurar qual valor de entrada (formatado ou bruto) vincular em seu formulário quando uma máscara específica for aplicada. Por padrão, includeLiterals
é definido como false e o valor bruto é usado.
<!--sample.component.html-->
<igx-switch [(ngModel)]="includeLiterals" (change)="clear()">
Include Literals
</igx-switch>
<igx-input-group>
<label igxLabel>
Social Security Number
</label>
<input #ssn name="socialSecurityNumber" type="text"
igxInput
[igxMask]="'###-##-####'"
[(ngModel)]="socialSecurityNumber"
[includeLiterals]="includeLiterals" />
</igx-input-group>
<p *ngIf="socialSecurityNumber.length > 0">Value: {{ socialSecurityNumber }}</p>
// sample.component.ts
public socialSecurityNumber: string = '123-45-6789';
public includeLiterals: boolean = true;
public clear() {
if (this.includeLiterals === false){
this.socialSecurityNumber = '123-45-6789';
} else {
this.socialSecurityNumber = '';
}
}
Validate Masked Values
Além de definir uma máscara para uma entrada, você pode validar o valor inserido também. O exemplo a seguir implementa máscaras, validação e notificação para dados inválidos usando a diretiva Mask e o componente Snack Bar.
<!--sample.component.html-->
<igx-input-group>
<label igxLabel for="birthday">Birthday</label>
<input igxInput #dateInput [igxMask]="'00/00/0000'" [igxTextSelection]="true" name="birthday" type="text"
(blur)="validateDate(dateInput, snackbar)" />
</igx-input-group>
<igx-snackbar #snackbar></igx-snackbar>
// sample.component.ts
public validateDate(dateInput, snackbar) {
if (!this.isDateValid(dateInput.value)) {
this.notify(snackbar, 'Invalid Date', dateInput);
}
}
private isDateValid(date) {
return (new Date(date).toLocaleString() !== 'Invalid Date');
}
private notify(snackbar, message, input) {
snackbar.message = message;
snackbar.show();
}
Text Selection
Você pode forçar o componente a selecionar todo o texto de entrada em foco usando igxTextSelection
. Encontre mais informações sobre igxTextSelection
em Label & Input.
Importe o IgxTextSelectionModule
no seu arquivo app.module.ts:
...
import { ..., IgxTextSelectionModule } from 'igniteui-angular';
// import { ..., IgxTextSelectionModule } from '@infragistics/igniteui-angular'; for licensed package
@NgModule({
...
imports: [..., IgxTextSelectionModule]
...
})
export class AppModule {}
Em seguida, adicione isto ao modelo:
<igx-input-group>
<input igxInput [igxMask]="'###-##-####'" [igxTextSelection]="true"/>
</igx-input-group>
Você pode ver como isso funciona no exemplo anterior.
Note
Para que o componente funcione corretamente, é crucial definir igxTextSelection
após a diretiva igxMask
. O motivo para isso é que ambas as diretivas operam no evento focus
de entrada, então a seleção de texto deve acontecer após a máscara ser definida.
Apply additional formatting on focus and blur
Além do comportamento de máscara padrão, o usuário pode implementar seus próprios pipes personalizados e aproveitar as propriedades de entrada focusedValuePipe
e displayValuePipe
para transformar o valor em uma saída desejada quando a entrada obtém ou perde o foco. Isso não afetará o valor do modelo subjacente. Vamos demonstrar como isso pode ser alcançado!
Implemente dois pipes que irão acrescentar/remover um sinal '%' no final do valor exibido:
@Pipe({ name: 'displayFormat' })
export class DisplayFormatPipe implements PipeTransform {
public transform(value: any): string {
if (value !== null && value !== undefined) {
value = value.toString().trim();
if (!value.endsWith('%')) {
value += ' %';
}
}
return value;
}
}
@Pipe({ name: 'inputFormat' })
export class InputFormatPipe implements PipeTransform {
public transform(value: any): string {
if (value !== null && value !== undefined) {
value = value.toString().replace(/%/g, '').trim();
}
return value;
}
}
Passe uma instância de cada pipe para as propriedades de entrada focusedValuePipe
e displayValuePipe
da seguinte maneira:
public value = 100;
public displayFormat = new DisplayFormatPipe();
public inputFormat = new InputFormatPipe();
<igx-input-group>
<label igxLabel>Increase</label>
<input
igxInput
type="text"
[(ngModel)]="value"
[igxMask]="'000'"
[igxTextSelection]="true"
[focusedValuePipe]="inputFormat"
[displayValuePipe]="displayFormat"
/>
</igx-input-group>
Como resultado, um sinal '%' deve ser acrescentado ao valor de desfoque (ou seja, quando o usuário clica fora da entrada) e será removido quando a entrada receber foco!
Adding a placeholder
O usuário também pode aproveitar a propriedade placeholder
input , que serve ao propósito do atributo placeholder input nativo. Se nenhum valor for fornecido para o placeholder
, o valor definido para a máscara será usado.
value = null;
<igx-input-group>
<label igxLabel>Date</label>
<input igxInput
type="text"
[(ngModel)]="value"
[igxMask]="'00/00/0000'"
[placeholder]="'dd/mm/yyyy'"/>
</igx-input-group>
API References
Additional Resources
Nossa comunidade é ativa e sempre acolhedora para novas ideias.