Arrays 链接到角度数组的输入值行为不一致

Arrays 链接到角度数组的输入值行为不一致,arrays,angular,input,ngfor,Arrays,Angular,Input,Ngfor,我在一个角度组件中使用一个数字数组,该数组链接到html模板中的一系列输入,使用*ngFor。当在给定输入上检测到更改时,数组中相应单元格的值将更新。我检查了它,组件中的数组值已正确更新 但是,给定输入上的新值有时会影响另一输入中显示的值(即新值也写入该输入)。这通常发生在初始值相同的不同输入上。它似乎也是受影响的循环中的一个输入 更奇怪的是,如果我将数组的值显示为纯文本,则显示的值总是正确的 我还手动为输入设置了唯一的名称和ID,以避免任何可能的混淆,而不会产生任何结果 我做了一个决定。如果将

我在一个角度组件中使用一个数字数组,该数组链接到html模板中的一系列输入,使用*ngFor。当在给定输入上检测到更改时,数组中相应单元格的值将更新。我检查了它,组件中的数组值已正确更新

但是,给定输入上的新值有时会影响另一输入中显示的值(即新值也写入该输入)。这通常发生在初始值相同的不同输入上。它似乎也是受影响的循环中的一个输入

更奇怪的是,如果我将数组的值显示为纯文本,则显示的值总是正确的

我还手动为输入设置了唯一的名称和ID,以避免任何可能的混淆,而不会产生任何结果

我做了一个决定。如果将第一个输入值更改为“2”,则问题立即可见:第二个输入的值也将更改为“2”。 JSFIDLE使用的是Angular 4,我已经用Angular 6进行了测试,但它也不起作用

你知道我做错了什么,问题出在哪里吗

let{Component,NgModule,OnInit}=ng.core;
@组成部分({
选择器:“我的应用程序”,
模板:`
{{v}

`, }) 类HomeComponent实现OnInit{ 公共值:数字[]=[]; n=5; 恩戈尼尼特(){ for(设i=0;i

{{v}

使用(输入)代替(更改)可以工作

let { Component, NgModule, OnInit } = ng.core;

@Component({
  selector: 'my-app',
  template: `
    <div *ngFor="let v of values; let i = index;" style="float: left;"><input type="text" name="input-{{i}}" id="input-{{i}}" value="{{v}}" (input)="onChange($event,i)"/><p>{{ v }}</p></div>
  `,
})
class HomeComponent implements OnInit {
      public values: number[] = [];
        n = 5;

    ngOnInit() {
        for(let i = 0; i < this.n; i++)
            this.values.push(1);
    }
    // event first
    onChange(event,i: number)
    {
        this.values[i] = parseInt(event.target.value);
      console.log(event)
    }
}

const { BrowserModule } = ng.platformBrowser;

@NgModule({
  imports:      [ BrowserModule ],
  declarations: [ HomeComponent ],
  bootstrap:    [ HomeComponent ]
})
class AppModule { }

const { platformBrowserDynamic } = ng.platformBrowserDynamic;
platformBrowserDynamic().bootstrapModule(AppModule);
let{Component,NgModule,OnInit}=ng.core;
@组成部分({
选择器:“我的应用程序”,
模板:`
{{v}

`, }) 类HomeComponent实现OnInit{ 公共值:数字[]=[]; n=5; 恩戈尼尼特(){ for(设i=0;i

建议使用[(ngModel)]而不是值,(ngModelChange)而不是(change),不要混淆

谢谢您的帮助,但是使用(输入)事件并不能解决问题,使用[(ngModel)]也不能解决问题。很抱歉,事实并非如此。尝试在第一个输入中键入'2',在第二个输入中也会得到'2',这不是期望的行为