0

我是角度的新手。我想为用户创建一个表单来选择他自己的电子邮件地址。我想创建一个指令,允许用户输入字母数字字符“。” 或“-”,不允许其他字符。请问你有例子吗?

4

2 回答 2

0

您可以创建一个新文件 email.directive.ts,并将其用作主模块文件中的提供。之后使用它的选择器和输入字段。希望有帮助。

import { Directive, ElementRef, HostListener } from '@angular/core';
import { NgControl } from '@angular/forms';

@Directive({
    selector: '[email-directive]'
})

export class EmailDirective {

    private checkPattern(value: string) {
        const regExpString =  "^[a-zA-Z0-9_@.+ ]*$"; // characters only
        return String(value).match(new RegExp(regExpString));
    }

    private specialKeys = [
        'Backspace', 'Tab', 'End', 'Home', 'ArrowLeft', 'ArrowRight', 'Delete'
    ];

    constructor(private el: ElementRef, private control : NgControl) { }

    lastValue = '';

    @HostListener('input', ['$event'])
    onInput(event: KeyboardEvent) {
        if (this.specialKeys.indexOf(event.key) !== -1) {
            return;
        }
        let current: string = this.el.nativeElement.value;
        if (current && !this.checkPattern(current)) {
            this.el.nativeElement.value = this.lastValue;
            this.control.control.setValue(this.lastValue);
            return;
        }
        this.lastValue = current;
        this.control.control.setValue(this.lastValue);
    }
}
于 2021-10-26T04:34:30.100 回答
0

您可以使用 Angular 内置的 EmailValidator https://angular.io/api/forms/Validators#email

对于反应形式

const control = new FormControl('bad@', Validators.email);

对于模板驱动器表单(

<input type="text" name="email" [(ngModel)]="model.property" #email="ngModel" required email />
于 2019-03-10T21:27:26.523 回答