ngModelChange为什么会发出前一个输入值?

ngModelChange为什么会发出前一个输入值?

问题描述:

我有一个(非常)简单的Angular2组件,只有一个文本字段。我需要它,以便每次对此字段进行任何更改时,控制台都会记录该字段的值。 IE如果有人输入“ABCD”,控制台应该记录:“A”,“AB”,“ABC”,“ABCD”。ngModelChange为什么会发出前一个输入值?

但是我看到的情况是控制台在新输入注册之前记录了字段的PREVIOUS值。相反,我得到:“”,“A”,“AB”,“ABC”。

我该如何让控制台在输入新字符后记录文本字段的值?

非常感谢。

我迄今为止代码:

import { Component, OnInit, ViewChild, EventEmitter, Output } from '@angular/core'; 
import { NgForm } from '@angular/forms'; 

@Component({ 
    selector: 'modal-test-form', 
    template: ` 
    <form> 
     <input name="data" placeholder="Type something" ngModel (ngModelChange)="onTextChange()"/> 
    </form> 
    `, 
    //templateUrl: './modal-test-form.component.html', 
    styleUrls: ['./modal-test-form.component.css'] 
}) 
export class ModalTestFormComponent{ 
    @ViewChild(NgForm) testForm : NgForm; 

    constructor() { } 

    onTextChange() { 
    console.log(this.testForm.form.value); 
    } 

} 
+0

什么 “旧值”? – Alex

+0

@ AJT_82所以现在发生的事情是console.log(this.testForm.form.value)在输入新字符之前记录表单的值。所以如果我刚刚输入“ABC”,控制台将只记录“AB”。我希望它记录“ABC”,这是当前值。 – SemperCallide

改变你的方法

(ngModelChange)="onTextChange($event)" 

和组件类

onTextChange(val: string): any { 
    console.log("updated value is --->", val); 
} 
+0

修正了它!谢谢 – SemperCallide

+0

欢迎您... :) –

变化根据在那里你CONSOLE.LOG从形式值从

(ngModelChange)="onTextChange()" 

的方法,我想你已经写了一个“错误”,当你提交你的问题(??),其实你的意思是你有这个方法在你的html:

(ngModelChange)="emitDataValue()" 

但无论如何,ch把它变成:

(keyup)="emitDataValue()" 

它似乎按照你的意愿工作。

+0

你对错误是正确的 - 谢谢 – SemperCallide