当前位置: 首页 > 知识库问答 >
问题:

操作1 FormControl多输入角

田冥夜
2023-03-14

我有一个这样的对象列表:

listSubject = [
{name: 'Math', lessonPerWeeks: 1},
{name: 'Lit', lessonPerWeeks: 2},
{name: 'Bio', lessonPerWeeks: 3},
{name: 'Phy', lessonPerWeeks: 7},
{name: 'Remains', lessonPerWeeks: 36},
];

我把它们放在一个输入循环中,像这样改变值:

<div *ngFor="let subject of listSubject">
<input *ngIf="subject.name != 'Remains'" type="number" [(ngModel)]="subject.lessonsPerWeeks" [formControl]="changeValue">
<div *ngIf="subject.name === 'Remain'">
   {{subject.lessonPerWeeks}}
</div>
</div>

FormControl: changeValue用于检测

this.changeValue
        .valueChanges
        .debounceTime(200)
        .subscribe(()=>{
          for(let i=0; i < this.listSubject.length;i++){
            let subject = this.listSubject[i];
            let lastSubject = this.listSubject[this.listSubject.length-1];
            subject.percentSem1 = subject.lessonPerWeeks/ this.totalLessonPerWeeks * 100;


            if(i === this.listSubject.length - 1){
              return;
            }
            else if(i === 0){
              lastSubject.lessonPerWeeks = 36; 

            }
            lastSubject.lessonPerWeeks -= subject.lessonPerWeeks;
          }

        });

我认为我的问题是对所有输入使用表单控件。请帮我解决这个问题。谢谢

共有2个答案

柴耀
2023-03-14

阅读@Partha Sarathi Ghosh的回答和评论后。我终于找到了解决办法。我为列表中的每个对象添加了相同的FormControl,然后将它们绑定到HTML中。类型脚本代码:

this.listSubject.forEach((subject)=>{
      subject.changeValue = new FormControl();
      subject.changeValue
          .valueChanges
    .debounceTime(200)
    .subscribe(()=>{
      for(let i=0; i < this.listSubject.length;i++){
        let subject = this.listSubject[i];
        let lastSubject = this.listSubject[this.listSubject.length-1];
        subject.percentSem1 = subject.lessonPerWeeks/ this.totalLessonPerWeeks * 100;


        if(i === this.listSubject.length - 1){
          return;
        }
        else if(i === 0){
          lastSubject.lessonPerWeeks = 36; 

        }
        lastSubject.lessonPerWeeks -= subject.lessonPerWeeks;
      }

    });}

和HTML

<div *ngFor="let subject of listSubject">
<input *ngIf="subject.name != 'Remains'" type="number" [(ngModel)]="subject.lessonsPerWeeks" [formControl]="subject.changeValue">
<div *ngIf="subject.name === 'Remain'">
   {{subject.lessonPerWeeks}}
</div>
</div>

但是,有没有更好的解决方案?

丘飞
2023-03-14

使用name属性为每个输入独特。其他

<div *ngFor="let subject of listSubject; let i = index">
<input *ngIf="subject.name != 'Remains'" 
 type="number" name="field_{{i}}" 
 [(ngModel)]="subject.lessonsPerWeeks" [formControl]="changeValue">
<div *ngIf="subject.name === 'Remain'">
   {{subject.lessonPerWeeks}}
</div>
</div>

引用:

angular2-ngmodel-inside-ngfor-data-not-binding-on -

angular2使用ngfor绑定输入元素中的name属性

dynamic-angular2-form-with-ngmodel-of-ngfor-elemen

 类似资料:
  • 本文向大家介绍Dapper.NET 针对多组输入执行操作,包括了Dapper.NET 针对多组输入执行操作的使用技巧和注意事项,需要的朋友参考一下 示例 有时,您想多次做同一件事。Execute如果实际上将最外面的参数(通常是单个匿名类型或域模型实例)提供为IEnumerable序列,则Dapper在方法上支持此方法。例如: 在这里,dapper只是对我们的数据做一个简单的循环,基本上和我们做的一

  • 我的表单当前有上面的CSS代码, 我想要能够使标签红色时,字段是必需的。我的输入字段是: 但是CSS不起作用,我该如何解决这个问题呢? 第二个问题是我有以下CSS: 但是当项目被聚焦时,如果我移除“background-color:#ff3434;”,它不会变成黄色。焦点变黄了? 我做不到的事吗?还是我做错了? 谢谢

  • 问题内容: 我有以下形式的文本输入: 我试图让它接受多行输入。宽度和高度会使框变大,但用户可以输入所有想要的文本,但它只能填充一行。 如何使输入更像文本区域? 问题答案: 您需要使用文本区域进行多行处理。

  • 本文向大家介绍C++中输入输出流及文件流操作总结,包括了C++中输入输出流及文件流操作总结的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了C++中输入输出流及文件流操作笔记,供大家参考,具体内容如下 1、流的控制     iomanip          在使用格式化I/O时应包含此头文件。     stdiostream   用于混合使用C和C + +的I/O机制时,例如想将C程序

  • 输出操作允许DStream的操作推到如数据库、文件系统等外部系统中。因为输出操作实际上是允许外部系统消费转换后的数据,它们触发的实际操作是DStream转换。目前,定义了下面几种输出操作: Output Operation Meaning print() 在DStream的每个批数据中打印前10条元素,这个操作在开发和调试中都非常有用。在Python API中调用pprint()。 saveAsO

  • 我有两个过程需要在几个领域进行验证。 对于类,我需要验证几个字段。基于这些字段,我将验证这个类。 对于类,我需要验证不同的字段。如果这些字段有效,那么我将验证这个类。 我的两个进程都应该将GenericRecord传递给Validator类,现在取决于它是ProcessA还是ProcessB,我的Validator类应该验证这些字段。 对于ProcessA,我需要验证、、。 对于ProcessB,