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

使用ngFor在表单内动态设置离子输入值

华景同
2023-03-14

例如,在ion-card-title中,它显示“John Doe”:{{item.payload.doc.data().name}}。但是在ion-input formControlName=“ename”的“value”属性中,相同的内容是空白的。

我订阅了firestore集合,因为多人使用该页面,当新的线索被添加或现有的线索被更改时,我需要实时更新。

我尝试了[(ngModel)]绑定,但无论我做了什么,它都使每个列表项具有相同的数据集(除非我更改了索引,例如,item.payload.doc.data().name更改为,item[3].payload.doc.data().name等)

因此,概括地说,我试图使用以下行将“John Doe”(以及正确的后续名称)显示为表单值:ion-input formcontrolname=“ename”type=“text”value=“item.payload.doc.data().name”

以下是相关的代码部分:

.html

<ion-card *ngFor="let item of items; let i = index;">
<ion-card-header>
  <ion-card-subtitle>{{item.payload.doc.data().created.seconds * 1000 | date:'MM/dd/yy' }} </ion-card-subtitle>
  <ion-row>
    <ion-col>
      <ion-card-title>{{item.payload.doc.data().name}} | {{item.payload.doc.data().dates}} </ion-card-title>
    </ion-col>
    <ion-col size="1" class="ion-text-right">
      <ion-button fill="outline" (click)="expandItem(item)">View</ion-button>
    </ion-col>
  </ion-row>
</ion-card-header>

<ion-card-content>
  <app-expandable expandHeight="300px" [expanded]="item.expanded">

      <form [formGroup]="existingLeadForm" class="existingLeadForm" (ngSubmit)="doUpdateLead(item.payload.doc.id)">
        <ion-grid>
      <ion-row>
        <ion-col size="6" size-sm>
          <ion-item>
          <ion-label position="stacked">Name</ion-label>
          <ion-input formControlName="eName" type="text" value="item.payload.doc.data().name"></ion-input>
        </ion-item>
        </ion-col>
        <ion-col size="6" size-sm>
          <ion-item>
          <ion-label position="stacked">Email</ion-label>
          <ion-input formControlName="eEmail" type="email" value="item.payload.doc.data().email"></ion-input>
        </ion-item>
        </ion-col>
        <ion-col size="6" size-sm>
          <ion-item>
          <ion-label position="stacked">Phone</ion-label>
          <ion-input formControlName="ePhoneNumber" type="tel" value="item.payload.doc.data().phoneNumber"></ion-input>
        </ion-item>
        </ion-col>
      </ion-row>
      <ion-row>
        <ion-col size="12" class="ion-text-right">
          <ion-button color="primary-gradient" type="submit">
            <ion-icon name="save"></ion-icon>
            Update
          </ion-button>
          <ion-button color="dark" (click)="archiveLead(item)">
            <ion-icon name="albums"></ion-icon>
            Archive
          </ion-button>
        </ion-col>
      </ion-row>
    </ion-grid>
    </form>

  </app-expandable>
</ion-card-content>
existingLeadForm:FormGroup;
items: any = [];    
subscription$: Subscription;

  this.existingLeadForm = this.formBuilder.group({
    eEmail: ['', Validators.compose([Validators.pattern('^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+.[a-zA-Z0-9-.]+$'), Validators.required])],
    eName: ['', Validators.required],
    ePhoneNumber: ['', Validators.required],
  })

            this.subscription$ = this.firestore.collection('leads', ref => ref.where('archived','==',false).orderBy('created','asc'))
        .snapshotChanges().subscribe(data => {
          this.items = data
          this.items.expanded = false
          console.log(data)
        });
(5) [{…}, {…}, {…}, {…}, {…}, expanded: false]
0: {type: "added", payload: {…}, expanded: false}
1: {type: "added", payload: {…}, expanded: false}
2: {type: "added", payload: {…}, expanded: false}
3: {type: "added", payload: {…}, expanded: false}
4: {type: "added", payload: {…}, expanded: false}
expanded: false
length: 5
__proto__: Array(0)

共有1个答案

夹谷浩博
2023-03-14


也许我错过了它,但我在您的模板中找不到ngFor。

一种方法是在订阅部分手动设置该值。
类似于:

this.existingLeadForm.controls['email'].setValue(emailFromData)

关于订阅,我更喜欢的是StateManagement.
在本例中是Ngxs,它的优秀部分是Ngxs from。

 类似资料:
  • 我正在尝试使用用户对web表单的输入创建一个用户名cookie。然而,它不起作用,我不知道为什么。你知道问题出在哪里吗?

  • 是否可以在模板驱动的表单中使用ngFor创建输入字段,并使用类似#name=“ngmodel”的东西来在另一个标记中使用name.valid? 现在,我们有一个动态的产品列表,在一个表中有一个数量字段和一个添加到购物车按钮。我想把整个事情变成一个表单,末尾有一个add all按钮,如下所示: 但是如何为NGModel每行生成一个新的变量名呢?

  • 问题内容: 有没有一种方法可以设置文件输入()的值,还是为了安全起见将其全部阻止?我正在尝试使用Google Gears的openFiles创建一个简单的多上传器。 注意: 以下答案反映了2009年旧版浏览器的状态。现在,您实际上可以在2017年使用JavaScript动态/以编程方式设置文件输入元素的值。 有关详细信息和演示,请参见此问题的答案: 如何以编程方式设置文件输入值(即:拖放文件时)?

  • 但是,如果我这样做,'Required'验证器在单击Submit按钮时不起作用。 我试过几种方法: > 没有设置[ngModelOptions]=“{standalone:true}”,而是尝试了name='person:{{$index}}‘。不起作用。

  • 我试图为门票销售做一个可变长度的输入表单,在这一点上,我想为客人的名字和性别构建许多输入表单,但我想不出如何使用这种方法来做必须唯一的id。我目前正在尝试使用这个,并得到疯狂的错误: 未处理的promise拒绝:模板解析错误:解析器错误:意外令牌=在[let guest of guest;i=index]列第24处,在sellticketcomponent@315:22(“#f=”ngform“>

  • 问题内容: 我需要更改输入的插入符号位置,在该位置添加给定的数字(示例)。 是否可以执行类似此示例的操作? 我需要例如: 输入:1234。 因此插入符号的位置将为2。 新数字:9 决赛:12934 提前致谢。 问题答案: 我认为这类情况在指令中看起来更好。例如: 用法: 我从这个答案中使用了跨浏览器光标定位的功能。 演示:http : //plnkr.co/edit/5RSgzvyd8YOTaXP