大写指令不更新输入角度

时间:2018-09-23 20:36:29

标签: angular

此大写指令不适用于angular .... 如果我打印console.log()以查看格式化方法的值,则可以看到我输入的值,但是在inputText上文本不会更新为大写;

我在html上的声明

  

<input type="text" uppercase >

import {Directive, Input, Output, EventEmitter, OnInit} from 'angular2/core';

@Directive({
    selector: '[uppercase]',
    host: {
        '[value]': 'uppercase',
        '(input)': 'format($event.target.value)'
    }
})
export class Uppercase implements OnInit {

    @Input() uppercase: string;
    @Output() uppercaseChange: EventEmitter<string> = new EventEmitter<string>();

    constructor() {
    }

    ngOnInit() {
        this.uppercase = this.uppercase || '';
        this.format(this.uppercase);
    }

    format(value) {
        value = value.toUpperCase();
        this.uppercaseChange.next(value);
    }
}

我该怎么写大写字母?

1 个答案:

答案 0 :(得分:1)

您可能需要像其他<input type="text" uppercase >一样更新模板,以应用Directive中的所有更改。

但是纠正您的逻辑很重要,因为uppercase指令将应用于类似输入的nativeElement

因此,您可能需要实现 ControlValueAccessor 接口并调整指令。

下面是一个示例,您如何执行此操作(我修改了您的代码):Uppercase directive on stackblitz

我在代码中添加了一些注释。

让我知道您是否要归档。


编辑(在下面查看评论)

如果您正在寻找一种更简单的方法来创建指令并保留所需的两件事输入文本应为大写,而占位符应为​​小写,则只需类似于

uppercase.directive.ts

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

@Directive({
 selector: '[uppercase]'
})
export class UppercaseDirective {
  constructor(public ref: ElementRef) { }

  @HostListener('input', ['$event']) onInput(event) {
     this.ref.nativeElement.value = event.target.value.toUpperCase();
  }
}

your.template.html

<input placeholder="placeholder lowercase" uppercase type='text'>

我通过stackblitz制作了另一个here演示