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.