首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通用输入过滤器

通用输入过滤器
EN

Stack Overflow用户
提问于 2017-11-26 11:58:10
回答 1查看 289关注 0票数 0

我需要一个通用的输入过滤器,这样我就不必每次都编写ng-model逻辑。

我的解决方案是:

代码语言:javascript
复制
<input type="text" [(ngModel)]="foo" input-filter="-?[0-9]*" />

代码隐藏

代码语言:javascript
复制
import { Directive, Input, HostListener, ElementRef, Inject } from '@angular/core';
import { NgModel } from '@angular/forms';

@Directive({
    selector: '[ngModel][input-filter]',
    providers: [NgModel]
})
export class InputFilter {  
    @Input('input-filter') filter: string;
    private regEx: RegExp;
    private previousValue: string;

    constructor(private element: ElementRef, private ngModel: NgModel) {        
        this.previousValue = '';
    }

    @HostListener('keydown', ['$event']) onKeyDown(event) {
        if (!this.regEx) {
            this.regEx =  new RegExp(`^${this.filter}$`);
        }

        if(this.regEx.test(this.ngModel.value)) {
            this.previousValue = this.ngModel.value;
        }
    }
    @HostListener('keyup', ['$event']) onKeyUp(event) {
        let e = <KeyboardEvent> event;

        if(this.regEx.test(this.ngModel.value)) {
            return;
        } else {
            this.ngModel.update.emit(this.previousValue);
        }
    }   
}

这个解决方案是有效的,但我很好奇是否有人有更好的方法。

有什么建议吗?

更新

我问得太早了。原始指令没有更新模型(愚蠢的我)。新代码确实更新了模型。

过滤器是通过input元素上的属性传入的。

EN

回答 1

Stack Overflow用户

发布于 2017-11-26 15:14:20

如果您正在尝试验证输入,并且不允许用户插入错误的值,那么您就走在了正确的道路上,但是您遗漏了一些要点。

您应该像添加本地验证器一样添加自定义验证器(例如: required)。

Hope this article will help you.

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47492891

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档