Angular 2 Directive使用ngModelChange将输入字段设置为大写

JR *_* S. 5 angular2-directives

请帮忙.我在创建一个总是将文本输入设置为大写的指令时遇到了麻烦.它似乎正在查看用户界面,但模型绑定显示仍为小写字符的最后一个类型字符.

下面是我的html的一部分:

<div>
    <md-input-container fxFlex>
        <textarea #listCode mdInput [(ngModel)]="listInfo.code" placeholder="List Code" 
                  uppercase-code maxlength="50" rows="3"
                  required></textarea>
        <md-hint align="end">{{listCode.value.length}} / 50</md-hint>
    </md-input-container>
    {{listInfo.code}}
</div>
Run Code Online (Sandbox Code Playgroud)

以下是指令:

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

@Directive({
  selector: '[ngModel][uppercase-code]',
  host: {
    '(ngModelChange)': 'ngOnChanges($event)'
  }
})
export class UppercaseCodeDirective {
  constructor(public model: NgControl) {}
  ngOnChanges(event) {
    var newVal = event.replace(/[^A-Za-z0-9_]*/g, '');
    newVal = newVal.toUpperCase();
    this.model.valueAccessor.writeValue(newVal);       
  }
}
Run Code Online (Sandbox Code Playgroud)

Ara*_*ind 7

您应该使用如下指令,

@HostListener('keyup') onKeyUp() {
      this.el.nativeElement.value = this.el.nativeElement.value.toUpperCase();

    }
Run Code Online (Sandbox Code Playgroud)

现场演示