微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

动态更新数据

如何解决动态更新数据

这里是 HTML 代码。我创建了表格并使用了一些 ng modal

<div class="container">
    <table>
        <thead>
            <tr>
                <th>Name</th>
                <th>Username</th>
                <th>Email</th>
                <th>Phone</th>
                <th>Website</th>
                <th>Edit data</th>
            </tr>
        </thead>
        <tbody>
            <tr *ngFor="let contact of contacts">
                <td><span>{{ contact.name }}</span></td>
                <td><span>{{ contact.username }}</span></td>
                <td><span>{{ contact.email }}</span></td>
                <td><span>{{ contact.phone }}</span></td>
                <td><span>{{ contact.website }}</span></td>
                <td><button class="edit-data" (click)="openEdit(contentEdit,contact)">Edit</button></td>
            </tr>
        </tbody>
    </table>
</div>

<ng-template #contentEdit let-modal>
    <div class="modal-header">
        <h4 class="modal-title" id="modal-basic-title">Edit data</h4>
        <button type="button" class="close" aria-label="Close" (click)="modal.dismiss('Cross click')">
          <span aria-hidden="true">&times;</span>
        </button>
    </div>
    <div class="modal-body">
        <form [formGroup]="editForm" novalidate>
            <div class="form-group">
                <label for="name">Name</label>
                <div class="input-group">
                    <input formControlName="name" class="form-control">
                </div>
            </div>
            <div class="form-group">
                <label for="username">Username</label>
                <div class="input-group">
                    <input formControlName="username" class="form-control">
                </div>
            </div>
            <div class="form-group">
                <label for="email">Email</label>
                <div class="input-group">
                    <input formControlName="email" class="form-control">
                </div>
            </div>
            <div class="form-group">
                <label for="phone">Phone</label>
                <div class="input-group">
                    <input formControlName="phone" class="form-control">
                </div>
            </div>
            <div class="form-group">
                <label for="website">Website</label>
                <div class="input-group">
                    <input formControlName="website" class="form-control">
                </div>
            </div>
            <div class="border text_center">
                <button data-dismiss="modal" class="btn btn-info" (click)="updateContent()">Save changes</button>
            </div>
        </form>
    </div>
    <div class="modal-footer">
        <button type="button" class="btn btn-outline-dark" (click)="modal.close('Save click')">Cancel</button>
    </div>
</ng-template>

我正在尝试编写无需后端即可自动更新数据的函数。我认为它应该与数组一起使用(通过键查找一些数据并将其更改为新的输入值)。你能帮我理解一下吗?我应该使用哪种方法


    export class ContactListComponent implements OnInit {
     
      contacts: Contact[] = [];
      editForm!: FormGroup;
      patchValue!: void;
      closeResult!: string;
      contact!: Contact;

      constructor(
        private httpClient: HttpClient,private fb: FormBuilder,private modalService: NgbModal
      ) { }

      ngOnInit(): void {
        this.updateContact();
        this.contacts = [];
        this.getContacts();
        this.editForm = this.fb.group({
          name: [''],username: [''],email: [''],phone: [''],website: ['']
        });
      }

      getContacts() {
        this.httpClient.get<any>('some url').subscribe(
          response => {
            console.log(response);
            this.contacts = response;
            localStorage.setItem('contacts',JSON.stringify(this.contacts));
            localStorage.getItem('contact');
          }
        );
      }
      

      openEdit(targetModal:any,contact:Contact) {
        this.modalService.open(targetModal,{
          centered: true,backdrop: 'static',size: 'lg'
        });
        this.editForm.patchValue({
          name: contact.name,username: contact.username,email: contact.email,phone: contact.phone,website: contact.website
        });
      }

      updateContact(): any {
        ???? problem is here
       }

解决方法

您是否尝试过无后端数据库平台?比如火力点。我建议尝试angularFire

就这么简单,

updateContact(id: string,contact:Contact) {
  let doc = this.afs.collection('values',ref => ref.where('id','==',id));
  doc.snapshotChanges().subscribe((res: any) => {
    let id = res[0].payload.doc.id;
    this.afs.collection('values').doc(id).update(contact);
  });
}

请注意,如果您的 id 是唯一的并且只返回一个查询结果,这应该有效

,

假设您没有任何不可变字段(您不允许用户编辑的字段,例如联系人 ID),您必须在选择更新时存储联系人索引,因为用户可以更改所有字段并且您将无法判断哪个联系人更新了。

例如 在 HTML 中

<tr *ngFor="let contact of contacts;let i = index">
    <td><span>{{ contact.name }}</span></td>
    <td><span>{{ contact.username }}</span></td>
    <td><span>{{ contact.email }}</span></td>
    <td><span>{{ contact.phone }}</span></td>
    <td><span>{{ contact.website }}</span></td>
    <td><button class="edit-data" (click)="openEdit(contentEdit,contact,i)">Edit</button></td>
</tr>

并更新您的模态函数以将索引作为参数,以便它可以保存当前选择的联系人。

openEdit(targetModal:any,contact:Contact,contactIndex: number) {
    this.selectedContactIndex = contactIndex;
    this.modalService.open(targetModal,{
      centered: true,backdrop: 'static',size: 'lg'
    });
    this.editForm.patchValue({
      name: contact.name,username: contact.username,email: contact.email,phone: contact.phone,website: contact.website
    });
  }

然后每当您更新更改时,只需覆盖该索引处的对象。

updateContact(): any {
    // Do your validations here
    const formValue = this.editForm.value;
    this.contacts[this.selectedContactIndex] = formValue;
}

PS:如果可以有一些用户在编辑联系人时无法更改的字段(例如contactId)会更好,以便您保存更改的工作更容易。这样您就可以简单地使用 Array.find 通过使用联系人 ID 从数组中获取相应的对象,而不必将索引保存在某处。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?