javascript - 如何使用模型驱动/ react 形式修改指令中的输入值

标签 javascript angular angular2-forms angular2-directives

我想实现一个“TrimDirective”,它使用 Angular 2 RC 5 和模型驱动/ react 形式从输入字段中删除前导和尾随空格。

我设法更改了输入字段的值,但是我没有在 myForm.valueChanges() 的组件中获得新值。

查看这个插件:http://plnkr.co/edit/ruzqCh?p=preview

当指令更改值时,如何触发 formGroup 的更新?

模板:

<form [formGroup]="myForm">
  <input formControlName="name" trim>
</form>
latest value: -{{ latestValue }}-

组件:

@Component({
  selector: 'my-app',
  templateUrl: 'app/app.html'
})
export class AppComponent implements OnInit {

  private myForm: FormGroup;
  private latestValue: string;

  ngOnInit() {
    this.myForm = new FormGroup({
      name: new FormControl(),
    });
    this.myForm.valueChanges.subscribe(v => this.latestValue = v.name)
  }
}

指令:

@Directive({
    selector: '[trim]'
})

export class TrimDirective {

    private el: any;

    constructor(
        el: ElementRef
    ){
        this.el = el.nativeElement;
    }

    @HostListener('keypress')
    onEvent() {
        setTimeout(() => { // get new input value in next event loop!
            let value: string = this.el.value;
            if(value && (value.startsWith(' ') || value.endsWith(' '))) {
                console.log('trim!');
                this.el.value = value.trim();
            }
        },0);
    }
}

最佳答案

您可以在元素上创建并触发更改事件,以告知 Angular 更新模型值。

let event: Event = document.createEvent("Event");
event.initEvent('input', true, true);
Object.defineProperty(event, 'target', {value: this.elementRef.nativeElement, enumerable: true});
this.renderer.invokeElementMethod(this.elementRef.nativeElement, 'dispatchEvent', [event]);

关于javascript - 如何使用模型驱动/ react 形式修改指令中的输入值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39103944/

相关文章:

Angular2 - 如何创建一个简单的表

Angular 2 : Accessing data from FormArray

javascript - 将 Nan 更改为字符串

javascript - 向 jQuery 幻灯片添加自动播放功能

javascript - 向 Controller 添加服务时出现未知提供商

angular - 在组件之间共享 Auth Observable 值,无需多次执行

java - 如何制作一个警告框来询问用户是否要离开页面或不仅仅是 Angular ?

javascript - Angular 2 动态表单 - 实现清晰的功能

angular - 如何在由 Angular 2 *ngFor 填充的选择元素上设置选择?

JavaScript:无法理解此 while 循环中的逻辑