角度 – 使用ngModel更改字段值的属性指令

前端之家收集整理的这篇文章主要介绍了角度 – 使用ngModel更改字段值的属性指令前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想在使用属性指令输入时更改(强制)输入字段值.有了它,我想创建大写字母,小写,maxlength,filterchar等的指令,以便在窗体的输入字段上使用.我发现这个例子: Angular 2 Attribute Directive Typescript Example,但这似乎不起作用.也许这是为了早期建立的A​​ngular2.然而,我正在做什么.

当我创建一个这样的指令时:

  1. import {Directive} from 'angular2/core';
  2. import {NgModel} from 'angular2/common';
  3.  
  4. @Directive({
  5. selector: '[ngModel][uppercase]',host: {
  6. '(input)' : 'onInputChange()'
  7. }
  8. })
  9. export class UppercaseDirective{
  10.  
  11. constructor(public model:NgModel){}
  12.  
  13. onInputChange(){
  14. var newValue = this.model.value.toUpperCase();
  15. this.model.valueAccessor.writeValue(newValue);
  16. this.model.viewToModelUpdate(newValue);
  17. }
  18. }

并在这样的表单上使用它:

  1. <input type="text" class="form-control" [(ngModel)]="field.name" ngControl="name" #name="ngForm" required uppercase>

(并将NgModel注册为提供商).我得到了

undefined this.model.value.

我可以使用$event.target.value = $event.target.value.toUpperCase()(当使用onInputChange()传递$event时),并且可以用于视图(它将输入显示为大写,t更新绑定字段“field.name”.

那么如何创建一个这样做的Angular2属性指令?

– 编辑 –

经过进一步的调查,我设法得到我想要的. Günter提供的答案更接近我的原意,也许更好.但这里是另一种方式:

  1. import {Directive,Input,Output,EventEmitter} from 'angular2/core';
  2.  
  3. @Directive({
  4. selector: '[ngModel][uppercase]',host: {
  5. "(input)": 'onInputChange($event)'
  6. }
  7. })
  8. export class UppercaseDirective{
  9. @Output() ngModelChange:EventEmitter<any> = new EventEmitter()
  10. value: any
  11.  
  12. onInputChange($event){
  13. this.value = $event.target.value.toUpperCase()
  14. this.ngModelChange.emit(this.value)
  15. }
  16. }

正如我所说,我不知道这是否也是一个很好的方法,所以评论是受欢迎的.

更新

这种方法不能正常工作.请参阅@ RyanHow的答案,以获得更好的解决方案.

原版的

  1. @Directive({
  2. selector: '[ngModel][uppercase]',providers: [NgModel],host: {
  3. '(ngModelChange)' : 'onInputChange($event)'
  4. }
  5. })
  6. export class UppercaseDirective{
  7. constructor(private model:NgModel){}
  8.  
  9. onInputChange(event){
  10. this.model.valueAccessor.writeValue(event.toUpperCase());
  11. }
  12. }

Plunker

猜你在找的Angularjs相关文章